JAVA2 BASIC2

으누·2024년 8월 31일
0

인터페이스(interface) : 틀

추상 클래스를 고도화 시킨 문법
상수와 추상 메소드만 존재한다.
구현은 인터페이스를 지정한 클래스에서 진행하고
인터페이스를 다른 클래스에 지정할 때는 implements
키워드를 사용한다.

추상클래스와 인터페이스의 관계

인터페이스를 클래스에 바로 지정하면 모든 메소드에 강제성이 부여되어서	
전부 다 구현해야 한다. 하지만 일반적인 상황에서는 모든 것이 아닌,
필요한 메소드만 콜라서 재정의 해야한다.
인터페이스를 직접 지정하지 않고 다른 클래스에 지정한 후 바디를 만들어
놓는다면, 강제성이 소멸되고 이 클래스를 상속받아서 필드를 구현한다면, 골라서
재정의를 할 수 있게 된다.
이때 중간에서 강제성을 없애주는 클래스를 추상 클래스로 선언하기로 하며,
추상 클래스 이름 뒤에는 Adapter를 붙여서 목적을 알려준다.

다중 상속

여러 부모 클래스를 상속하는 것을 다중 상속이라고 한다.
JAVA는 모호성 때문에 다중 상속을 지원하지 않는다.
하지만 JDK8 버전부터는 인터페이스에 default메소드 선언을 허용하며
여러 개를 지정할 수 있는 특성상 다중 상속을 지원하는 것이나
다름이 없다.

마커 인터페이스(marker interface)

클래스들을 그룹화하기 위한 목적으로 사용한다.
인터페이스는 지정한 클래스 부모이며, 모든 자식은 부모 타입이므로
마커 인터페이스를 지정 받은 클래스들이 하나의 타입으로 묶이게 된다.
이름 뒤에 Marker를 붙여줘야 한다.

모호성(ambiguity)

하나의 자식이 여러 부모를 상속 받을 때 부모 필드에 동일한 이름의 
필드가 있다면 어떤 부모의 필드인지 알 수가 없다. 이를 모호성이라고 부른다.

모호성 해결 방법

- 상황1 : 두 개의 인터페이스 내에 이름과 매개변수가 똑같은 메소드가 선언되어 있다.

- 상황1 해결 : 자식 클래스에서 재정의해서 사용한다.

- 상황2 : 부모 클래스의 메소드와 인터페이스의 디폴트 메소드의 이름과 매개변수가

똑같이 선언되어 있다.

- 상황2 해결 : 부모 클래스의 메소드가 사용된다.


내부 클래스

하나의 클래스에 a작업과 b작업이 있을 때에는 따로 분리하여 클래스로
만들지 않고 클래스 안에 클래스를 선언하여 설계한다. 이 때 밖에 있는
클래스를 외부 클래스라고 하며 , 안에 선언된 클래스를 내부 클래스라고 한다.
외부 클래스가 메모리에 할당되어야 내부 클래스를 객체화할 수 있기 때문에
클래스를 숨기기 위해서 내부 클래스를 사용하기도 하며, 이를 캡슐화 또는
은닉화라고 한다.
내부 클래스는 외부 클래스의 필드이기 때문에 외부 클래스의 필드를 자신의
필드처럼 가져다 사용할 수 있지만 상속관계가 아니기 때문에 내부 클래스이라도
extends를 통해 다른 클래스를 상속받아서 사용할 수 있다.

익명 클래스(Anonymous Inner Class)

이름이 없는 클래스이며 구현되지 않은 필드를 구현하기 위해 일회성으로
생성되는 클래스이다.
profile
코딩 일기장

0개의 댓글