- 자바의 정석 chapter 7 다양성 까지 1차적으로 정리
- 추후에 다시 정리 예정임
- chapter 7. 객체지향 II
-
- 상속
- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것
- 두 클래스를 조상 클래스와 자손 클래스로 관계를 맺어주는 것
- 자손 클래스은 조상 클래스의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
- 자손 클래스의 멤버개수는 조상 클래스 보다 적을 수 없다(같거나 많다)
- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다
- 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다
- 포함관계(composite)
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다
- 가능한 한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다상속 VS 포함관계(composite)
- 주로 포함관계를 많이 사용한다
- Java에서는 단일상속만 허용한다
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다
- 상속
- Object클래스 - 모든 클래스의 최고조상
- 조상이 없는 클래스는 자동적으로 Object클래스를 상속받게 된다
- 상속계층도의 최상위에는 Object클래스가 위치한다
- 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다
- 선언부가 같아야 한다(이름, 매개변수, 리턴타입)
- 접근제어자를 좁은 범위로 변경할 수 없다
- 조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
- 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다오버라이딩(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)
- static - 클래스의, 공통적인
- final - 마지막의, 변경될 수 없는
- 생성자를 이용한 final 멤버변수 초기화
- 접근 제어자를 이용한 캡슐화
- 생성자의 접근 제어자
- 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다
- 생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다
- 제어자의 조합
- 메서드에 static과 abstract를 함께 사용할 수 없다
- static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다
- 클래스에 abstract와 final을 동시에 사용할 수 없다
- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다
- abstract메서드의 접근제어자가 private일 수 없다
- abstract 메서드는 자손 클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다
- 메서드에 private과 final을 같이 사용할 필요는 없다
- 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다 이 둘 중 하나만 사용해도 의미가 충분하다
- 메서드에 static과 abstract를 함께 사용할 수 없다
- 다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
- 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것
- 즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성.
- 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만, 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
- 참조변수의 형변환
- 서로 상속관계에 있는 타입간의 형변환만 가능하다
- 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능
- instanceof연산자
- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용
- 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false
- instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다
- 참조변수와 인스턴스변수의 연결
- 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버변수가 달라진다. (참조변수타입에 영향받음)
- 메서드가 중복정의된 경우, 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 메서드가 호출된다.(참조변수타입에 영향받지 않음)
- 매개변수의 다형성
- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
- 조상타입의 배열에 자손들의 객체를 담을 수 있다
- chapter 7. 객체지향 II
- 상속 VS 포함관계(composite)
- 상속
- 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것
- 두 클래스를 조상 클래스와 자손 클래스로 관계를 맺어주는 것
- 자손 클래스은 조상 클래스의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외)
- 자손 클래스의 멤버개수는 조상 클래스 보다 적을 수 없다(같거나 많다)
- 공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다
- 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다
- 포함관계(composite)
- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다
- 가능한 한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다
- 주로 포함관계를 많이 사용한다
- Java에서는 단일상속만 허용한다
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다
- 상속
- Object클래스 - 모든 클래스의 최고조상
- 조상이 없는 클래스는 자동적으로 Object클래스를 상속받게 된다
- 상속계층도의 최상위에는 Object클래스가 위치한다
- 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다
- 오버라이딩(overriding)
- 조상 클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 오버라이딩이라고 한다. → overriding -vt ‘~위에 덮어쓰다(overwrite)’, ‘~에 우선하다. ’
- 선언부가 같아야 한다(이름, 매개변수, 리턴타입)
- 접근제어자를 좁은 범위로 변경할 수 없다
- 조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
- 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다
- 오버로딩은 상속관계 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)
- 접근 제어자를 이용한 캡슐화
- 생성자의 접근 제어자
- 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다
- 생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다
- 제어자의 조합
- 메서드에 static과 abstract를 함께 사용할 수 없다
- static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다
- 클래스에 abstract와 final을 동시에 사용할 수 없다
- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다
- abstract메서드의 접근제어자가 private일 수 없다
- abstract 메서드는 자손 클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다
- 메서드에 private과 final을 같이 사용할 필요는 없다
- 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다 이 둘 중 하나만 사용해도 의미가 충분하다
- 메서드에 static과 abstract를 함께 사용할 수 없다
- 다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
- 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것
- 즉, 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것이 다형성.
- 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만, 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
- 참조변수의 형변환
- 서로 상속관계에 있는 타입간의 형변환만 가능하다
- 자손 타입에서 조상타입으로 형변환하는 경우, 형변환 생략가능
- instanceof연산자
- 참조변수가 참조하는 인스턴스의 실제 타입을 체크하는데 사용
- 이항연산자이며 피연산자는 참조형 변수와 타입. 연산결과는 true, false
- instanceof의 연산결과가 true이면, 해당 타입으로 형변환이 가능하다
- 참조변수와 인스턴스변수의 연결
- 멤버변수가 중복정의된 경우, 참조변수의 타입에 따라 연결되는 멤버변수가 달라진다. (참조변수타입에 영향받음)
- 메서드가 중복정의된 경우, 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 메서드가 호출된다.(참조변수타입에 영향받지 않음)
- 매개변수의 다형성
- 참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.
- 조상타입의 배열에 자손들의 객체를 담을 수 있다
- 상속 VS 포함관계(composite)
- 생성자의 접근 제어자
-
카테고리 없음
댓글