-
Java 클래스의 다양한 형태(추상 클래스, 내부 클래스, 익명 클래스)Java 2024. 2. 25. 15:16728x90반응형
추상클래스(abstract class)
추상메서드 조상클래스에서는 선언부만 작성하고, 주석을 덧붙여 어떤 기능을 수행할 목적으로 작성되었는지 알려줌.
실제 내용은 자손이 구현
구현부가 없어서 중괄호({})대신에 ;만 붙인다
/*주석으로 어떤 목적으로 작성했는지 설명*//*~~하는 메서드이다.*/ abstract 리턴타입 메서드이름();
실제 작업내용인 구현부가 없는 메서드가 무슨 의미가 있을까?
> 실제 작업 내용인 구현부보다 더 중요한게 선언부다
메서드의 이름, 작업에 필요한 매개변수, 결과로 나타날 값의 타입을 결정하는 것은 쉽지않다.
메서드를 사용하는 쪽에서는 메서드가 실제로 어떻게 구현된지 몰라도 메서드의 이름, 매개변수, 리턴타입
즉, 선언부만 알고 있으면 된다.
abstract를 안적고 그냥 빈 몸통만 만들면?
>>일반적으론 문제가 없다.
근데 자손쪽에서 오버라이딩을 제대로 안해놓으면 그 상태에서 문제가 생길 수 있다.
따라서 오버라이딩을 강제하기 위해 abstract를 적는게 좋다내부 클래스
사용 빈도는 적음
클래스 내에 선언된 클래스
이렇게 하는 이유는 두 클래스가 서로 긴밀한 관계에 있기 때문
한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버 간에 쉽게 접근할 수 있다.
외부에 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄인다
예시class A{ class B{ } }
B는 A의 내부 클래스, A는 B의 외부 클래스
B는 A를 제외하면 다른 클래스에서 잘 사용되지 않는 것이어야 한다
종류와 특징
내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다.
인스턴스 클래스 : 클래스의 멤버변수 선언 위치, 외부 클래스의 인스턴스 멤버처럼 다뤄짐. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용
스태틱 클래스 : 클래스의 멤버변수 선언 위치, 외부 클래스의 static 멤버처럼 다뤄짐. 주로 외부 클래스의 static멤버랑 사용
지역 클래스 : 클래스의 메서드나 초기화블럭 안쪽, 선언된 영역 내부에서만 사용익명 클래스 : 클래스 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)
스태틱 클래스만 스태틱멤버를 가질 수 있다.
다만 final, static이 동시에 붙은 변수는 상수이므로 모든 내부 클래스에서 정의가 가능하다.
제어자에 대한 규칙도 똑같이 적용된다. final, abstract, 접근 제어자 등등 전부익명 클래스
클래스의 선언과 객체의 생성을 동시에 한다.
단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.
이름이 없기 때문에 생성자도 없다.
조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에,
하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다.
예시new 조상클래스이름(){ // 멤버 선언 } 또는 new 구현인터페이스이름(){ // 멤버선언 }
익명클래스는 이름이 없기 때문에 '외부 클래스명$숫자.class'의 형식으로 클래스파일명이 결정된다.
클래스를 상속받는 형태로 그냥 만들어도 되지만 그러면 패키지 안에 클래스가 너무 많아져서 보기에 복잡해진다.
그래서 자주 안쓰는 것들을 이런식으로 쓴다고 한다.728x90반응형'Java' 카테고리의 다른 글
Java 예외 처리 (1) 2024.02.25 Java 인터페이스 (1) 2024.02.25 Java 제어자 (0) 2024.02.25 Java Import (0) 2024.02.25 Java 패키지 (1) 2024.02.25