본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/5. 상속, 다형성

(5)
5. Java 자바 - 필드의 다형성 클래스의 자동 타입 변환이 필요한 이유 자식 타입으로 사용하면 될텐데, 부모 타입으로 변환해서 사용하는 이유는?? 다형성을 구현하는 기술적 방법 때문이다. 다형성 : 동일한 타입을 사용하지만, 다양한 결과가 나오는 성질 주로 필드의 값을 다양화함으로써 실행 결과가 다르게 나오도록 구현한다. 필드 타입은 변함이 없지만, 실행 도중에 어떤 객체를 필드로 저장하느냐에 따라 실행 결과가 달라질 수 있다. (필드의 다형성) 프로그램은 수 많은 객체들이 서로 연결되고 각자의 역할을 한다. 이 객체들은 다른 객체로 교체될 수 있어야 한다. (부품 처럼!) ex) 자동차 클래스에 포함된 타이어 클래스 자동차 클래스를 처음 설계할 때 사용한 타이어 객체는 언제든지 성능 좋은 타이어 객체로 교체할 수 있어야 한다. 새로 ..
4. Java 자바 - 타입 변환과 다형성 다형성 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 다형성을 위해 자바는 부모 클래스로 타입 변환을 허용한다. 즉 부모 타입에 모든 자식 객체가 대입될 수 있다. (부모 타입의 규격화) 이것을 이용하면 객체는 부품화가 가능하다. ex) 타이어 클래스 타입을 적용했다면 이 클래스를 상속한 실제 타이어들은 어떤 것이든 상관 없이 장착(대입) 가능하다. 자동차는 타이어 타입으로 Hankook 타이어와 Kumho 타이어를 사용하지만, 각 타이어의 성능은 다르게 나온다. 위 그림은 아래 코드처럼 표현된다. public class Car { Tire t1 = new HankookTire(); // 자식 타입 객체 대..
3. Java 자바 - protected 접근 제한자 protected 접근 제한자 (상속과 관련이 있다.) protected 는 public 과 default 접근 제한의 중간쯤에 해당된다. 같은 패키지에서는 default 와 같이 접근 제한이 없지만, 다른 패키지에서는 자식 클래스만 접근을 허용한다. protected 는 필드, 생성자, 메소드 선언에 사용될 수 있다. ex) A.java package package1; public class A { //필드 protected String field; //생성자 protected A() { } //메소드 protected void method() { } } ex) B 클래스는 A 클래스와 동일한 패키지에 있다. default 접근 제한과 마찬가지로 B 클래스의 생성자와 메소드에는 A 클래스의 protec..
2. Java 자바 - 메소드 재정의 @Overrride, final 클래스, final 메소드 부모 클래스의 모든 메소드가 자식 클래스가 사용하기 적합하지 않는 경우가 있다. 이때 상속된 일부 메소드는 자식 클래스에서 다시 수정해서 사용한다. (메소드 오버라이딩) 메소드 재정의 (@Override) 상속된 메소드 내용이 자식 클래스에 맞지 않을 경우 자식 클래스에서 동일한 메소드를 재정의한다. 메소드가 오버라이딩되었다면, 부모 객체의 메소드는 숨겨지기 때문에 자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출된다. 메소드 오버라이딩 시 주의할 점 - 부모 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 리스트)를 가져야 한다. - 접근 제한을 더 강하게 다시 설정하여 오버라이딩 할 수 없다. ( public < default < protected < private ) -..
1. Java 자바 - 상속 inheritance 상속(inheritance) : 부모가 자식에게 물려줌, 자식은 상속으로 부모가 물려준 것을 자연스럽게 이용할 수 있다. 객체 지향 프로그래밍에서도 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 부모 클래스(상위 클래스), 자식 클래스(하위 클래스, 파생 클래스) 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만든다. 따라서 코드의 중복을 줄여준다. field1, field2, method1( ), method2( ) 를 가진 클래스가 있다면 모두 처음부터 작성하는 것보다 field1, method1( ) 을 가지고 있는 클래스가 있다면, 이 클래스를 상속하고 field2, method2( ) 만 추가하면 효율적이고 개발 시간을 절약시켜준다. 실제로 B 클래스를 객체 생성해서 아래와..