10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자 10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자 Section 4 상속과 메소드 오버라이딩 Section 5 예약어 super Section 6 Object 클래스 Section 7 예약어 final Section 8 상속과 포함 1
학습 목표 절차 지향에서의 재사용 방법과 상속의 개요를 학습합니다. 상속의 효과와 특징에 대해 학습하고, 자바의 상속에 관해 학습합니다. 클래스 상속 시 한정자 지정에 따른 접근 여부에 관해 학습합니다. 생성자와 상속에 관해 학습합니다. 상속 관계에서 묵시적 생성자와 명시적 생성자의 차이를 학습합니다. 예약어 super에 관해 학습합니다. Object 클래스의 속성과 기능에 관해 학습합니다. 예약어 final에 관해 학습합니다. 상속과 포함의 관계를 비교 학습합니다.
1-1 모듈의 재사용과 객체지향 객체지향 이전에 모듈의 재사용 1 상속(Inheritance)의 개요 1-1 모듈의 재사용과 객체지향 객체지향 이전에 모듈의 재사용 모듈을 복사(copy & paste)하여 일부 내용을 변경하고, 추가하여 사용 비슷한 모듈이 양산되어, 나중에는 원하는 모듈을 발견하기 어려운 문제를 가지고 있다
1-1 모듈의 재사용과 객체지향 객체지향에서는 상속으로 문제를 해결 1 상속(Inheritance)의 개요 1-1 모듈의 재사용과 객체지향 객체지향에서는 상속으로 문제를 해결 상속은 상위 클래스의 속성과 기능을 하위 클래스 상속시키고, 하위 클래스에는 새로운 기능과 속성을 추가하면 된다 자바에서의 상속은 확장(extends)의 개념 하위 클래스 = 상위 클래스 + 하위 클래스에 추가된 기능과 속성
상속의 효과 1-2 상속의 효과와 자바 상속의 특징 클래스 검색이 쉬움 클래스 확장이 쉬움 클래스 변경이 쉬움 1 상속(Inheritance)의 개요 1-2 상속의 효과와 자바 상속의 특징 상속의 효과 클래스 검색이 쉬움 상속을 통하여 클래스를 체계화할 수 있습니다. 클래스 확장이 쉬움 상속을 통하여 새로운 클래스를 생성하기가 용이합니다 클래스 변경이 쉬움 상속을 통하여 기존 클래스의 기능을 쉽게 변경할 수 있습니다.
자바 상속의 특징 1-2 상속의 효과와 자바 상속의 특징 다중 상속을 허용하지 않습니다. 1 상속(Inheritance)의 개요 1-2 상속의 효과와 자바 상속의 특징 자바 상속의 특징 다중 상속을 허용하지 않습니다. 자바 모든 클래스는 Object 클래스로부터 상속됩니다. 자바의 최상위 클래스는 Object 클래스입니다. Object 클래스는 명시적으로 상속하지 않아도 묵시적 상속이 이루어집니다.
자바 언어에서 상속은 객체 지향 언어의 장점인 모듈의 재사용과 코드의 간결성을 제공하는 중요한 특성 1 상속(Inheritance)의 개요 1-3 자바의 상속 자바 언어에서 상속은 객체 지향 언어의 장점인 모듈의 재사용과 코드의 간결성을 제공하는 중요한 특성 클래스 선언 시 상속을 지정하기 위해 extends라는 예약어를 사용
1 상속(Inheritance)의 개요 1-3 자바의 상속
1 상속(Inheritance)의 개요 1-3 자바의 상속
자바에서 한정자를 사용할 수 있는 대상 클래스 멤버 변수 메소드 2 상속과 한정자 * 생성자(생성자의 한정자는 별 의미가 없음, public이나 붙이지 않거나, private가 사용될 수 있다
public, 한정자 없음, private외에 추가로 protected 한정자가 있다 2 상속과 한정자 public, 한정자 없음, private외에 추가로 protected 한정자가 있다
2 상속과 한정자
2 상속과 한정자 예제 10.2
2 상속과 한정자
2 상속과 한정자
클래스의 상속에서 생성자는 상속되지 않지만, 다음과 같은 특성을 가진다 3 상속과 생성자 클래스의 상속에서 생성자는 상속되지 않지만, 다음과 같은 특성을 가진다 상속 관계에서 하위 클래스에 묵시적 생성자가 있는 경우, 하위 클래스로부터 객체가 생성 될 때 상위 클래스의 묵시적 생성자가 우선 수행. 상속 관계에서 하위 클래스에 명시적(매개 변수가 있는) 생성자만 있는 경우, 상위 클래스의 묵시적 생성자가 우선 수행. 상속 관계에서 하위 클래스에 명시적 생성자와 묵시적 생성자가 모두 있는 경우, 하위 클래스의 어떠한 생성자가 호출되더라도 상위 클래스의 묵시적 생성자가 우선 수행
3 상속과 생성자 예제 10.5
3 상속과 생성자
3 상속과 생성자
4-1 메소드 오버라이딩 오버라이딩(overriding) 4 상속과 메소드 오버라이딩 4-1 메소드 오버라이딩 오버라이딩(overriding) 상속 관계에 있는 클래스들 간에 같은 이름의 메소드를 정의하는 경우 상위 클래스의 메소드와 하위 클래스의 메소드가 메소드 이름은 물론 매개변수의 타입과 개수까지도 같아야 함 9장에서 배운 메소드 오버로딩(Overloading)과 혼동하지 말것 오버로딩 : 같은 클래스 내에서 같은 이름의 생성자나 메소드를 사용하는 경우 동일한 클래스 내에서 이루어지는 오버로딩을 중첩(같은 메소드 여러 개 존재)으로 표현한다면, 오버라이딩은 치환(상위 클래스의 메소드를 하위 클래스의 메소드로 교체)으로 표현할 수 있다
4 상속과 메소드 오버라이딩 4-1 메소드 오버라이딩
4 상속과 메소드 오버라이딩 4-1 메소드 오버라이딩
4 상속과 메소드 오버라이딩 4-2 메소드 오버라이딩과 한정자 메소드를 오버라이딩하는 경우 상위 클래스의 메소드 한정자보다 허용 범위가 넓은 경우에만 허용되고, 그 반대의 경우는 허용되지 않는다 상위 클래스에서 public으로 사용된 메소드를 하위 클래스에서 한정자 없이 사용하거나 protected로 메소드를 오버라이딩 할 수 없다. 한정자의 허용 범위는 “public” → “protected” → “한정자 사용 안 함” 순서 private는 상속되지 않기 때문에 오버라이딩의 대상이 되지 않는다
4 상속과 메소드 오버라이딩 4-2 메소드 오버라이딩과 한정자
4 상속과 메소드 오버라이딩 4-2 메소드 오버라이딩과 한정자
4 상속과 메소드 오버라이딩 4-2 메소드 오버라이딩과 한정자
4 상속과 메소드 오버라이딩 4-2 메소드 오버라이딩과 한정자
4 상속과 메소드 오버라이딩 4-2 메소드 오버라이딩과 한정자
4-3 또 다른 주석 : @Override 메소드를 오버라이딩하여 사용할 때 유용하게 사용할 수 있는 주석 4 상속과 메소드 오버라이딩 4-3 또 다른 주석 : @Override 메소드를 오버라이딩하여 사용할 때 유용하게 사용할 수 있는 주석 @Override 주석 : 자바 컴파일러는 @Override 주석이 사용되어 메소드가 선언되면 상위 클래스의 메소드와 정확하게 일치하는지 검사하여 일치하지 않은 경우에는 컴파일 오류를 발생
4 상속과 메소드 오버라이딩 4-3 또 다른 주석 : @Override
5 예약어 super 예약어 super는 두 가지 형태로 사용 첫 번째는 하위 클래스에 의해 가려진 상위 클래스의 멤버 변수나 메소드에 접근할 때 사용 두 번째는 상위 클래스의 명시적 생성자를 호출하기 위해 사용
5 예약어 super
5 예약어 super
5 예약어 super
5 예약어 super
Object 클래스는 java.lang 패키지에 속해 있는 라이브러리 클래스
6 Object 클래스
6 Object 클래스 6-1 toString() 메소드 Object 클래스에 선언된 toString() 메소드는 객체의 클래스명과 메모리에서의 주소를 16진수로 반환하는 메소드
6 Object 클래스 6-1 toString() 메소드
6 Object 클래스 6-1 toString() 메소드
6-2 equals() 메소드 앞에서 두 개의 변수값을 비교하는 연산자로 동등 연산자(==)를 사용 6 Object 클래스 6-2 equals() 메소드 앞에서 두 개의 변수값을 비교하는 연산자로 동등 연산자(==)를 사용 동등 연산자를 참조 자료형의 변수에 적용할 수는 있지만, 예상치 않은 결과를 나타내게 된다. 기본 자료형 변수는 가지고 있는 값이 실제 값인 반면에, 참조 자료형 변수는 가지고 있는 값이 실제 값이 아니라 객체가 저장된 주소이기 때문
6 Object 클래스 6-2 equals() 메소드
6 Object 클래스 6-2 equals() 메소드
6 Object 클래스 6-2 equals() 메소드
6 Object 클래스 6-2 equals() 메소드
6 Object 클래스 6-2 equals() 메소드 예제 10.16
자바에서 final은 3가지 형태로 사용 : 모두 변하는 것을 방지하기 위해 사용 final의 두 번째 용도는 메소드에 final을 붙여 선언하는 경우. 이 경우에는 하위 클래스에서 이 메소드를 오버라이딩 할 수 없다는 의미 마지막으로 final은 클래스 선언에도 사용할 수 있다. final이 붙은 클래스는 상속을 허용하지 않는다
첫 번째는 메소드 지역 변수나 객체 변수에 final을 붙여 상수로 사용
7 예약어 final final의 두 번째 용도는 메소드에 final을 붙여 선언하는 경우. 이 경우에는 하위 클래스에서 이 메소드를 오버라이딩 할 수 없다는 의미
마지막으로 final은 클래스 선언에도 사용할 수 있다. final이 붙은 클래스는 상속을 허용하지 않는다
자바는 클래스를 재사용하기 위한 방법으로 상속뿐만 아니라 포함 (Composite) 관계를 제공 8 상속과 포함 자바는 클래스를 재사용하기 위한 방법으로 상속뿐만 아니라 포함 (Composite) 관계를 제공 상속관계 : “is-a”(~은 ~이다)로 표현 포함관계를 “has-a”(~은 ~을 가지고 있다)로 표현
8 상속과 포함 8.1 포함관계의 표현
8 상속과 포함 8.1 포함관계의 표현
8 상속과 포함 8.1 포함관계의 표현
8 상속과 포함 8.1 포함관계의 표현
8 상속과 포함 8.1 포함관계의 표현
학습 정리 상속Inheritance의 개요 상속과 한정자 ① 절차 지향에서의 모듈의 재사용이 가능하기는 하지만, 비슷한 모듈의 양산과 코드의 중복 문제가 발생하게 됩니다. ② 상속은 객체 지향의 주요 특성인 모듈의 재사용과 코드의 간결성을 제공합니다. ③ 객체 지향에서 상속은 확장의 개념으로 상위 클래스의 모든 요소를 상속받고 추가 요소를 더 가지는 개념입니다. ④ 상속은 다양한 효과와 특성을 가집니다. 상속과 한정자 ① 클래스가 상속되면 상위 클래스에 선언된 멤버 변수는 접근 한정자에 따라 상속 여부가 결정됩니다. ② protected 접근 한정자는 같은 패키지 내의 클래스와 같은 패키지는 아니지만, 상속된 클래스에서 사용 가능한 접근 한정자입니다.
학습 정리 상속과 생성자 상속과 메소드 오버라이딩 ① 상속 관계에서 매개 변수가 없는 생성자(묵시적 생성자)는 하위 클래스에서 객체가 생성될 때 자동으로 수행됩니다. ② 묵시적 생성자가 아닌 경우에는 명시적으로 super를 사용하여 호출하여야 합니다. 상속과 메소드 오버라이딩 ① 클래스가 상속되면 상위 클래스에 선언된 메소드도 접근 한정자에 따라 상속 여부가 결정됩니다. ② 상위 클래스에서 선언된 메소드와 같은 메소드를 하위 클래스에 선언하는 것을 오버라이딩이라 합니다. ③ 오버라이딩이 성립되기 위해서는 상위 클래스의 메소드와 매개 변수의 형과 개수가 정확하게 일치해야 합니다. ④ 상속 관계에서 메소드가 오버라이딩되면 상위 클래스의 메소드는 가려지게 됩니다. ⑤ 오버로딩의 개념이 중첩이라면, 오버라이딩의 개념은 상위 클래스의 메소드를 대치하는치환에 해당됩니다. ⑥ 메소드가 오버라이딩 될 때 상위 클래스 메소드의 한정자보다는 접근 허용 범위가 넓어야 합니다.
학습 정리 예약어 super Object 클래스 ② 상위 클래스의 생성자를 호출할 때도 사용합니다. Object 클래스 ① 모든 자바 클래스의 최상위 클래스는 Object 클래스입니다. ② 모든 자바 프로그램에는 Object 클래스에서 제공되는 메소드가 상속되므로 사용할 수 있습니다. ③ Object 클래스에서 제공되는 toString() 메소드는 객체의 특성을 나타내기 위해 사용되는 메소드로서 출력문의 매개 변수로 객체가 사용될 때 자동으로 호출되는 메소드입니다. ④ Object 클래스에서 제공되는 equals() 메소드는 객체의 동등 관계를 나타내는 메소드로서 물리적으로 같은 장소에 있는지를 비교하여 결과를 반환합니다. ⑤ toString() 메소드와 equals() 메소드를 클래스 작성 시 오버라이딩하여 유용하게 사용할 수 있습니다.
학습 정리 예약어 final ① 객체 변수나 메소드 지역 변수를 final로 선언하여 변하지 않는 상수값을 지정할 수 있습니다. ② 메소드를 final로 지정하면 하위 클래스에서 오버라이딩 할 수 없습니다. ③ 클래스를 final로 지정하면 하위 클래스를 가질 수 없다는 의미입니다. ④ final을 사용하는 이유는 보안과 설계의 명확화를 위해서입니다. 상속과 포함 자바는 클래스를 재사용하기 위한 방법으로 상속뿐만 아니라 포함 (Composite) 관계를 제공 상속관계 : “is-a”(~은 ~이다)로 표현 포함관계를 “has-a”(~은 ~을 가지고 있다)로 표현
수고하셨습니다. 제출 연습 문제를 잘 풀어서 제출해주시기 바랍니다 (다음 주 제출 문제 발표는?) 수고하셨습니다. 제출 연습 문제를 잘 풀어서 제출해주시기 바랍니다 (다음 주 제출 문제 발표는?) 61