관리 메뉴

KorSA

[남궁성 '자바의 정석'] 76~93강 본문

Study Memos/Java

[남궁성 '자바의 정석'] 76~93강

Praiv. 2021. 11. 11. 14:10
320x100

※ 이 글은 남궁성 저자의 '자바의 정석' 76~93강을 수강한 후 정리한 내용입니다.

 

1. java.lang 패키지의 클래스는 import하지 않고도 사용할 수 있다.

 


2. 객체지향에서는 다형성이 거의 원탑으로 중요하다.

 


3. instanceof 연산자는 참조변수의 형변환 가능여부 확인에 사용한다.
    형변환 가능하면 true를 리턴함.

    형변환 전에는 반드시 instanceof로 형변환 가능한지 확인하고 진행하자.

 


4. 다형성 장점
    1) 다형적 매개변수 : 부모 매개변수로 여러 자식 매개변수를 받을 수 있음
    2) 하나의 배열에 여러 종류 객체 저장 가능

 


5. 인터페이스는 추상 메서드의 집합 (프로그래밍 관점)
    인터페이스: 인스턴스 변수를 가질 수 없고 추상 메서드'만' 모아놓음 (JDK 1.8 이전까지는..)

class MyClass implements MyInterface {}


    추상클래스: 인스턴스 변수를 가질 수 있고 추상 메서드 + 구현 메서드를 가질 수 있음

class MyClass extends MyAbstractClass {}

 


6. 인터페이스는 다중 상속이 가능
    인터페이스는 추상메서드 집합이기 때문에 충돌에서 자유롭다. 추상메서드는 구현체가 없으니까.
    참고로 추상클래스는 단일 상속만 가능하다.

 


7. 인터페이스도 추상클래스처럼 구현클래스의 부모 역할을 한다.

 


8. 인터페이스의 장점
    1) 두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.

    2) A클래스가 B클래스를 사용할 때, 인터페이스 덕분에 B가 변경되어도 A는 안바꿀 수 있게 된다. 

        즉, 느슨한 결합이다.
        변경에 유리한 유연한 설계가 가능하다.

    3) 개발 시간을 단축할 수 있다?!
        A클래스가 B클래스를 사용할 때, 

        B가 아직 구현되어 있지 않아도 A는 인터페이스를 참조하여 개발을 진행할 수 있다. 

    4) 표준화가 가능하다.
        ex) JDBC

    5) 서로 관계없는 클래스들의 관계를 맺어줄 수 있다.
        특정 속성을 공유하는 클래스들에게서 해당 속성을 따로 빼내어 인터페이스로 활용할 수 있다.

 


9. JDK 1.8 부터는 인터페이스에 디폴트 메서드와 static 메서드도 사용 가능하게 되었다.
    JDK 1.8 이전에는 인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려웠음.
    

    왜냐면 인터페이스에 메서드 하나 추가할 때마다 이 인터페이스를 구현하는 

    모든 자식 객체들에게도 메서드 구현부를 추가해야됐기 때문.
    

    이 부분을 해결하기 위해 JDK1.8부터는 

    default 키워드를 추상 메서드 앞에 붙인 디폴트 메서드를 사용하기로 함.
 


10. 디폴트 메서드가 기존의 메서드와 충돌하는 경우가 생기게 됨. 그리고 이에 대한 해결책이 있다.
    1) 여러 인터페이스의 디폴트 메서드 간의 충돌
        - 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.
ex)

public class MyClass implements InterfaceA, InterfaceB {
	public void func(){
		// 명시적으로 어떤 인터페이스의 함수를 호출할 지 지정한다.
		InterfaceB.super.func();
	}
}


    2) 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
        - 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

728x90
728x90
Comments