JAVA

[JAVA] 추상 클래스, 인터페이스, 내부 클래스, 익명 클래스

shb 2021. 11. 20. 17:01

추상 클래스
- 필드 안에 구현이 안된 메소드가 선언되어 있는 클래스를 추상 클래스라고 한다.
- 이 때 구현되지 않은 메소드를 추상 메소드라고 부른다.
- 반드시 재정의를 통해 구현을 해야지만 메모리에 할당되기 때문에 강제성을 부여하기 위해서 추상 메소드로 선언한다.

추상 클래스 선언
abstract class 클래스명{
abstract 리턴타입 메소드명(자료형 매개변수1,...);
일반 메소드도 선언 가능.
}


---------------------------------------------------------------------------
인터페이스(interface) : 틀
- 추상 클래스를 고도화 시킨 문법.
- 상수와 추상메소드만 존재한다.
- 구현은 인터페이스를 지정한 클래스에서 진행하고,

  인터페이스를 다른 클래스에 지정할 때에는 implements 키워드를 사용한다.


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

- 인터페이스를 클래스에 바로 지정하면 모든 메소드에 강제성이 부여되어서 전부 다 구현해야 한다. 

- 하지만 일반적인 상황에서는 모든 것이 아닌, 필요한 메소드만 골라서 재정의해야 한다

- 인터페이스를 직접 지정하지 않고 다른 클래스에 지정한 후 바디({})를 만들어 놓는다면, 

  강제성이 소멸되고 이 클래스를 상속받아서 필드를 구현한다면, 골라서 재정의할 수 있게 된다

- 이 때 중간에서 강제성을 없애주는 클래스를 추상클래스로 선언하며, 

  클래스 이름 뒤에 Adapter를 붙여서 목적을 알려준다.


--------------------------------------------------------------------------

 


내부 클래스(inner class)


하나의 클래스에서 a작업과 b작업이 있을 때에는 따로 분리하여 클래스로 만들지 않고,
클래스 안에 클래스를 선언하여 설계한다

이 때 밖에 있는 클래스를 외부 클래스라고 하며, 안에 선언된 클래스를 내부 클래스라고 한다. 

외부 클래스가 메모리에 할당 되어야 내부 클래스를 객체화할 수 있기 때문에 

클래스를 숨기기 위해서 내부 클래스를 사용하기도 하며, 이를 캡슐화 또는 은닉화라고 부른다. 

내부 클래스는 외부 클래스의 필드이기 때문에 외부 클래스의 필드를 자신의 필드처럼 가져다 사용할 수 있게 된다.


※ 메소드 안에서 클래스를 선언할 수도 있다.

익명 클래스(Anonymous inner class)
이름이 없는 클래스이며 구현되지 않은 필드를 구현하기 위해서 일회성으로 생성되는 클래스이다.

---------------------------------------------------------------------------------------------------------------------------

 

[실습]
나이키 본사는 지점이 생길 때 지점으로부터 상품목록과 판매방식을 전달받은 후 등록을 완료해준다.
무료 나눔 매장이라면 sell()을 구현하지 않도록 하며, 메뉴와 판매방식을 테스트하는 곳에서는
판매방식을 테스트하는 대신 "무료 나눔 매장"을 출력하도록 구현한다.