상속 Inheritance
PrintWriter는 Writer 라는 Class를 상속받았다.
Writer 라는 Class는 Object 라는 Class를 상속받았다.
이것이 무슨 뜻일까?
우리가 어떤 기능을 만들 때 처음부터 끝까지 다 만들기는 어렵다. PrintWriter를 만든 사람도 처음부터 다 만들기 싫으니 이미 있는 Writer 라는 Class가 갖고 있는 메소드, 변수를 그대로 물려받으면서 여기에 자기가 원하는 변수, 메소드를 추가한 것이 PrintWriter인 것이다. 이와 같이 Writer도 Oject라는 Class에서 파생된 것이다.
Eclipse에서 PrintWriter라는 Class의 상속관계를 살펴보자.
PrintWriter에서 오른쪽 클릭을 한 후, Open Type Hierarchy 를 클릭해보자.
왼쪽에서 PrintWriter의 상속관계를 볼 수 있고, 오른쪽에서는 이런 메소드와 변수를 가지고 있다는 것을 볼 수 있다.
Object Class에서 toString(): String 이라는 메소드가 있다.
toString(): String 이라는 메소드를 Writer와 PrintWriter Class에서는 구현한 적이 없다.
그럼에도 불구하고 PrintWriter는 Writer를 Writer는 Object를 상속받고 있기 때문에 toString(): String 이라는 메소드를 사용할 수 있다.
toString(): String 이라는 메소드를 실행해보면 먼저 PrintWriter에서 찾고 없으면 Writer, 여기에도 없으면 Object로 가서 찾는다. 맨 위의 Class에서 있다면 실행이 될 것이고 없다면 에러를 뱉어낼 것이다.
다른 측면을 한 번 살펴보자.
Writer 에 write(String) 메소드가 정의되어 있다. (write에 입력값으로 String을 받는 메소드)
Writer를 상속받는 PrintWriter에도 write(String) 메소드가 정의되어 있다. 다시 말해서 덮어쓰기가 되어있다는 것.
이런 상황에서
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class InstanceApp {
public static void main(String[] args) throws IOException {
PrintWriter p1 = new PrintWriter("result1.txt");
p1.write("Hello 1");
p1.close();
PrintWriter p2 = new PrintWriter("result2.txt");
p2.write("Hello 2");
p2.close();
System.out.println(p1.toString());
p1.toString();
p1.write("hello 1");
}
}
라고 한다면 이는 PrintWriter의 메소드를 사용하는 것이다.
이 관계를 설명해보면
PrintWriter를 만든 사람이 Writer Class에서 write의 기능이 마음에 들지 않아 덮어쓰기를 하는 것이다.
이러한 관계를 PrintWriter의 write가 Write의 write를 덮어쓰기를 했다. 영어로는 override했다.
JAVA의 공식 사용 설명서에 보면 Tree라는 것이 있다.
JAVA가 우리에게 기본적으로 제공하는 표준 라이브러리의 클래스들이 서로 간의 어떠한 상속관계를 맺고 있는 가를 보여준다.
그 정점에는 Object가 있다. 그리고 이 Object가 가지고 있는 메소드들은 모든 Class가 공통적으로 사용할 수 있는 메소드 이기 때문에 시간을 내서 Object가 가지고 있는 메소드들의 의미, 쓰임에 대해 알아보자.
위의 사진을 보면 lock 이라고 하는 어떤 변수, 필드가 Writer라는 Class에 정의되어 있고 그것을 상속받아서 이 PrintWriter도 lock 이라고 하는 필드를 사용할 수 있다는 뜻.
위의 사진은 Object라는 Class가 갖고 있는 이러이러한 메소드들을 상속받았기 때문에 사용할 수 있다는 것을 알려준다.
'youtube.com|user|egoing2 > JAVA1' 카테고리의 다른 글
JAVA1 - 14.2 나의 앱 만들기 (변수 도입) (0) | 2022.01.21 |
---|---|
JAVA1 - 14.1 나의 앱 만들기 (OT, 기본 기능 구현) (0) | 2022.01.21 |
JAVA1 - 13.2 인스턴스 Instance (0) | 2022.01.20 |
JAVA1 - 13.1 자바 문서 보는 법 (패키지, 클래스, 변수, 메소드) (2) | 2022.01.20 |
JAVA1 - 10. 디버거 (0) | 2021.12.16 |