본문 바로가기
카테고리 없음

자바의 정석(chapter 7.)

by DinggoP 2022. 5. 24.
  • 자바의 정석 chapter 7 다양성 까지 1차적으로 정리 
  • 추후에 다시 정리 예정임
  • chapter 7. 객체지향 II
      • 상속
        • 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것
        • 두 클래스를 조상 클래스와 자손 클래스로 관계를 맺어주는 것
        • 자손 클래스은 조상 클래스의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
        • 자손 클래스의 멤버개수는 조상 클래스 보다 적을 수 없다(같거나 많다)
        • 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다
        • 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다
        •  
      • 포함관계(composite)
        • 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
        • 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다
      • 가능한 한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다상속 VS 포함관계(composite)
      • 주로 포함관계를 많이 사용한다
      • Java에서는 단일상속만 허용한다
      • 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다
    • Object클래스 - 모든 클래스의 최고조상
      • 조상이 없는 클래스는 자동적으로 Object클래스를 상속받게 된다
      • 상속계층도의 최상위에는 Object클래스가 위치한다
      • 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다
      1. 선언부가 같아야 한다(이름, 매개변수, 리턴타입)
      2. 접근제어자를 좁은 범위로 변경할 수 없다
        1. 조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
      3. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다오버라이딩(overriding)
        • 조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다. → overriding -vt ‘~위에 덮어쓰다(overwrite)’, ‘~에 우선하다. ’
      • 오버로딩은 상속관계 X, 메서드 정의할 때 이름이 같음( 예시 println(int x))
      • 오버라이딩은 상속관계이다.
      • 오버로딩 과 오버라이딩 설명을 할 줄 알아야 된다.
      • super - 참조변수
        • this - 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있음
        • 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재
        • super - this와 같음. 조상의 멤버와 자신의 멤버를 구별하는 데 사용
      • super( ) - 생성자
        • 자손 클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.
        • 조상의 멤버들도 초기화되어야 하기 때문에 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야 한다
      •  
      • 서로 관련된 클래스와 인터페이스의 묶음
      • 클래스가 물리적으로 클래스파일(*.class)인 것처럼, 패키지는 물리적으로 폴더이다 패키지는 서브패키지를 가질 수 있으며, ‘ . ‘으로 구분한다
      • 클래스의 실제 이름(full name)은 패키지명이 포함된 것이다 ( String 클래스의 full name은 java.lang.String)
      • rt.jar는 Java API의 기본 클래스들을 압축한 파일 ( JDK설치경로\jre\lib에 위치)패키지(package)
      • 사용할 클래스가 속한 패키지를 지정하는데 사용
      • import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다
      • java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다import문
      • static import문을 사용하면 static멤버를 호출할 때 클래스 이름을 생략할 수 있다
      • 접근 제어자(access modifier)
        • 생성자를 이용한 final 멤버변수 초기화
          • final이 붙은 변수는 상수이므로 보통은 선언과 초기화를 동시에 하지만, 인스턴스변수의 경우 생성자에서 초기화 할 수 있다.
          • 생성자에서 단 한번만 초기화할 수 있다.
        • abstract - 추상의, 미완성의
          • final - 마지막의, 변경될 수 없는
            • static - 클래스의, 공통적인
              • 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다
              • 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다
              • 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.제어자(modifier)
      • 접근 제어자를 이용한 캡슐화

      • 생성자의 접근 제어자
        • 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다
        • 생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다
      • 제어자의 조합
        1. 메서드에 static과 abstract를 함께 사용할 수 없다
          1. static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다
        2. 클래스에 abstract와 final을 동시에 사용할 수 없다
          1. 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다
        3. abstract메서드의 접근제어자가 private일 수 없다
          1. abstract 메서드는 자손 클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다
        4. 메서드에 private과 final을 같이 사용할 필요는 없다
          1. 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다 이 둘 중 하나만 사용해도 의미가 충분하다
      •  
      • 다형성(polymorphism)
        • 여러 가지 형태를 가질 수 있는 능력
        • 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것
        • 즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성.
        • 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만, 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
        • 참조변수의 형변환
          • 서로 상속관계에 있는 타입간의 형변환만 가능하다
          • 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능
        • instanceof연산자
          • 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용
          • 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false
          • instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다
        • 참조변수와 인스턴스변수의 연결
          • 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버변수가 달라진다. (참조변수타입에 영향받음)
          • 메서드가 중복정의된 경우, 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 메서드가 호출된다.(참조변수타입에 영향받지 않음)
        • 매개변수의 다형성
          • 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
        • 조상타입의 배열에 자손들의 객체를 담을 수 있다
        • chapter 7. 객체지향 II
          • 상속 VS 포함관계(composite)
            • 상속
              • 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것
              • 두 클래스를 조상 클래스와 자손 클래스로 관계를 맺어주는 것
              • 자손 클래스은 조상 클래스의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
              • 자손 클래스의 멤버개수는 조상 클래스 보다 적을 수 없다(같거나 많다)
              • 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다
              • 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다
              •  
            • 포함관계(composite)
              • 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
              • 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다
            • 가능한 한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다

            • 주로 포함관계를 많이 사용한다
            • Java에서는 단일상속만 허용한다
            • 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다
          • Object클래스 - 모든 클래스의 최고조상
            • 조상이 없는 클래스는 자동적으로 Object클래스를 상속받게 된다
            • 상속계층도의 최상위에는 Object클래스가 위치한다
            • 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다
          • 오버라이딩(overriding)
            • 조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다. → overriding -vt ‘~위에 덮어쓰다(overwrite)’, ‘~에 우선하다. ’
            1. 선언부가 같아야 한다(이름, 매개변수, 리턴타입)
            2. 접근제어자를 좁은 범위로 변경할 수 없다
              1. 조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
            3. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다

            • 오버로딩은 상속관계 X, 메서드 정의할 때 이름이 같음( 예시 println(int x))
            • 오버라이딩은 상속관계이다.
            • 오버로딩 과 오버라이딩 설명을 할 줄 알아야 된다.
            • super - 참조변수
              • this - 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있음
              • 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재
              • super - this와 같음. 조상의 멤버와 자신의 멤버를 구별하는 데 사용
            • super( ) - 생성자
              • 자손 클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.
              • 조상의 멤버들도 초기화되어야 하기 때문에 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야 한다
            •  
          • 패키지(package)
            • 서로 관련된 클래스와 인터페이스의 묶음
            • 클래스가 물리적으로 클래스파일(*.class)인 것처럼, 패키지는 물리적으로 폴더이다 패키지는 서브패키지를 가질 수 있으며, ‘ . ‘으로 구분한다
            • 클래스의 실제 이름(full name)은 패키지명이 포함된 것이다 ( String 클래스의 full name은 java.lang.String)
            • rt.jar는 Java API의 기본 클래스들을 압축한 파일 ( JDK설치경로\jre\lib에 위치)
          • import문
            • 사용할 클래스가 속한 패키지를 지정하는데 사용
            • import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다
            • java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다

            • static import문을 사용하면 static멤버를 호출할 때 클래스 이름을 생략할 수 있다
          • 제어자(modifier)
            • 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다
            • 제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다
            • 하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.

            • static - 클래스의, 공통적인

            • final - 마지막의, 변경될 수 없는

            • 생성자를 이용한 final 멤버변수 초기화
              • final이 붙은 변수는 상수이므로 보통은 선언과 초기화를 동시에 하지만, 인스턴스변수의 경우 생성자에서 초기화 할 수 있다.
              • 생성자에서 단 한번만 초기화할 수 있다.
            • abstract - 추상의, 미완성의

            • 접근 제어자(access modifier)

            • 접근 제어자를 이용한 캡슐화

            • 생성자의 접근 제어자
              • 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다
              • 생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다
            • 제어자의 조합
              1. 메서드에 static과 abstract를 함께 사용할 수 없다
                1. static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다
              2. 클래스에 abstract와 final을 동시에 사용할 수 없다
                1. 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다
              3. abstract메서드의 접근제어자가 private일 수 없다
                1. abstract 메서드는 자손 클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다
              4. 메서드에 private과 final을 같이 사용할 필요는 없다
                1. 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다 이 둘 중 하나만 사용해도 의미가 충분하다
            •  
            • 다형성(polymorphism)
              • 여러 가지 형태를 가질 수 있는 능력
              • 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것
              • 즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성.
              • 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만, 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
              • 참조변수의 형변환
                • 서로 상속관계에 있는 타입간의 형변환만 가능하다
                • 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능
              • instanceof연산자
                • 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용
                • 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false
                • instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다
              • 참조변수와 인스턴스변수의 연결
                • 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버변수가 달라진다. (참조변수타입에 영향받음)
                • 메서드가 중복정의된 경우, 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 메서드가 호출된다.(참조변수타입에 영향받지 않음)
              • 매개변수의 다형성
                • 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
              • 조상타입의 배열에 자손들의 객체를 담을 수 있다

댓글