JAVA

[JAVA] 클래스정의&종류

EJUN 2023. 4. 3. 01:14

클래스란?

만약 스마트폰이라는 클래스가 있다고 가정할 때, 스마트폰안에는 cpu, ram, 카메라 등 다양한 부품들이 들어가 있는데 

이를 담고 있는게 스마트폰이라는 클래스이고 그 안에 부품들을 클래스의 데이터라고 한다.

 

클래스 형식

위의 코드와 같이 클래스를 정의할 수 있다.

클래스의 구성요소

자바에서 클래스는 멤버로 속성을 표현하는 필드와 기능을 표현하는 메소드를 가진다.

뿐만 아니라 클래스는 생성된 객체의 필드를 초기화해주는 메소드인 생성자를 가진다.

클래스 구성요소

내부 클래스
하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다.

내부 클래스

 

내부 클래스의 장점

하나의 외부클래스가 여러 클래스와 관계를 맺는 것이 아니라 특정 클래스와 관계를 갖는다면 

위의 코드와 같이 내부클래스로 선언하는 것이 좋은데 이럴 때 장점은

내부클래스와 외부클래스를 함께 관리하는 것이 가능해서 유지보수가 편리해진다.

 

일반적인  클래스 정의

위처럼 일반적으로 클래스를 정의한 경우에는 Aoo라는 클래스를 인스턴스화 해서 사용했지만

 

위처럼 내부 클래스를 사용한 경우에는 상관관계파악이 용이하고, 더 강력한 캡슐화 원칙을 지킬 수 있다.

 

내부 클래스의 종류
내부 클래스에는 인스턴스 클래스, 스태틱 클래스, 지역 클래스, 익명 클래스가 존재한다.

내부 클래스의 종류

인스턴스 변수

클래스의 멤버 변수 선언부에 위치해있고, static키워드가 없는 클래스를 인스턴스 클래스라고 한다.

인스턴스 클래스

 

static 클래스

인스턴스 클래스와 비슷한 형태에서 static키워드가 붙은 클래스를 static클래스라고 한다.

static 클래스

static클래스 내부에는 instance멤버와 static멤버 모두 선언할 수 있다.

또한 외부클래스의 인스턴스 멤버에는 접근이 불가하고, 정적멤버에만 접근이 가능하다.

static클래스는 일반적인 static변수나 static메소드와 달리 메모리에 한번만 올라가는 인스턴스가 아닌

내부 인스턴스클래스처럼 외부 인스턴스를 먼저 선언하고 초기화하는 작업 필요없이, 내부 클래스의 인스턴스를 바로 

생성할 수 있다는 점이 있다.

 

로컬 클래스

메소드 내부에 위치하는 클래스이다. 즉, 지역변수와 동일한 성질을 가짐

 

로컬 클래스

로컬클래스는 접근제한자와 static을 붙일 수 없다.

이유는 메소드 안에 있기 때문에 접근 제한자가 필요없고, 메소드 안에서는 static을 선언할 수 없기 때문이다.

 

익명 클래스

클래스 이름이 존재하지 않는 클래스를 익명 클래스라고 한다.

익명 클래스

위 코드처럼 클래스이름이 존재하지 않고, 클래스 선언과 동시에 객체를 생성한다.

또한 생성자가 존재하지 않고, 일회용성을 지닌 클래스이고 필요한 메소드를 재정의하여 사용하는 기법이다.