2016년 1월 28일 목요일

[JAVA 교육] 접근제한자 / 다형성

[JAVA 교육] 접근제한자 / 다형성
(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.


  1. Modifier(제한자)
    1. access 접근제한자 (아래로 갈수록 접근 제한이 강화)
      1. public
        • 클래스, 변수, 생성자, 메서드
        • 어디서든 접근 가능
        • 표기: '+'
      2. protected
        • 변수, 생성자, 메서드, 내부클래스(Inner Class, 클래스 바로 안쪽 클래스, 메소드 안의 내부클래스는 로컬내부클래스)
        • 동일 패키지안에서 접근 가능
        • but, 상속 관계에 있다면 다른 패키지여도 접근 가능
        • 표기: '#'
      3. package friendly(or default 강사님은 default라는 것은 없다고 함.)(키워드는 아님)
        • 접근제한자를 표시하지 않는것.
        • 동일 패키지 안에서 접근 가능(protected와 공통점)
        • 클래스, 변수, 메서드, 내부클래스
        • 표기: '~' or 공백
      4. private
        • 변수, 메서드, 생성자, 내부클래스
        • 동일 클래스 안에서만 접근 가능
        • 표기: '-'
    2. usage
      1. static
      2. final
      3. abstract
      4. transient
      5. native
  2. OOP 특징
    1. Encapsulation
      1. 접근제한자
      2. 변수는 private, 메소드는 public
      3. 이유 : 입력 data 검증(변수에 직접 넣으면 if문으로 확인 불가하지만 setter로 넣으면 if문으로 검증가능), 권한 체크
    2. 상속 Inheritance
      1. 단일 상속
      2. extends 키워드를 이용한다.
      3. is-a 관계
      4. Object를 상속
      5. 필드, 메서드만 상속
      6. 부모객체를 참조할 때는 "super."
      7. 일반화(Generalization) - 분석/설계할 때 사용하는 상속 용어
    3. 재정의 Override
      1. 부모가 가진 메서드를 자식이 다시 재정의한 메서드를 만드는 것.
      2. 이름이 동일해야한다.
      3. 파라미터도 동일해야한다.
      4. 리턴타임도 동일해야한다.
      5. access modifier는 부모의 접근제한레벨보다 자식의 접근제한레벨이 더 public해야한다.
      6. 부모가 static이면 자식도 static이어야 한다.
      7. final 변수는 재정의 불가능(final 붙인거는 '상속은 해줄건데 고치지는 못한다~' 라는것)
      8. 부모에서 throws하지 않는 새로운 예외는 throws할 수 없다.
  3. Polymorphism (다형성)
    1. 상속 관계(is-a) 전제되야 한다.
    2. 다형적 객체
      1. 부모타입으로 선언
      2. 자식객체참조
      3. ex. Shape s = new Circle();
    3. 이종모음 Heterogeneous Collection
      1. 배열의 다형성이 적용되어서 여러 타입의 객체를 저장하는 것
    4. wrapper class
      1. 기본타입을 객체로 사용할 수 있도록 만들어 놓은 클래스
      2. Byte, Short, Integer, Long / Float, Double / Boolean / Character(문자)
      3. jdk 1.4.6에 생겼다.
      4. java SE 5(jdk 1.5)부터는 Auto Boxing을 지원한다.(=자동으로 wapper 적용, 자동으로 푸는것(unwrap)도 지원)
    5. Virtual Method Invocation
      1. 컴파일 타임때는 선언한 클래스(new로 만든 객체의 타입이 아니라 변수의 타입)의 메서드 참조
        추상메서드(abstract method = body가 없이 이름만 있는 메소드)도 참조 가능.
        (!중요! 추상메서드를 구현한 클래스는 반드시 abstract여야 한다. 하지만 그 역은 그럴 필요 없다. 그리고 추상클래스는 객체 생성은 안되지만 상속은 된다.)
      2. 런타임시 생성한 클래스(new로 생성한 객체)의 메서드 실행
      3. 선언한 클래스에 없는 메서드 호출하고 싶으면 형변환을 해야한다.
    6. instanceof (자바의 키워드 중 하나)
      1. 객체가 어떤 클래스의  instance인지를 알려주는 키워드
  4. Tip
    1. Singleton 디자인 패턴 : 생성되는 객체의 수를 제한, 1개로 제한자바의 API같은게 아니고 개발방법같은 것. 패턴.stateless에 적합, stateful 부적합

댓글 없음:

댓글 쓰기