본문 바로가기

JAVA/JAVA Programming

[JAVA] 자바를 구성하는 클래스, 인터페이스, 추상클래스

반응형

출처 : 자바의신 VOL.1 기초 문법편





자바를 구성하는 클래스, 인터페이스, 추상클래스






■ 자바에서 만든 코드를 관리하는 클래스 파일(.class)이 되는 타입의 종류


 ● 클래스

 ● 인터페이스

 ● 추상(abstract) 클래스

 ● 열거형(Enum) 클래스
 ● 어노테이션 선언 클래스





■ 인터페이스와 추상 클래스, 클래스의 차이


인터페이스

 ● 어떤 메소드가 존재해야 하는지에 대한 선언만 되어 있다.

 ● 절대로 구현되어 있는 메소드가 있어서는 안된다.
 ● 인터페이스를 구현하는 클래스에서는 implements를 사용하여 선언한다.




추상(abstract) 클래스

 ● 구현되어 있는 메소드가 있어도 상관 없다.

 abstract로 선언된 메소드가 1개 이상일 경우에는 반드시 추상(abstract) 클래스로 선언해야 한다.
 ● 추상 클래스를확장하는 클래스에서는 extends를 사용하여 선언한다.



③ 클래스
 ● 인터페이스나 abstract 클래스와 다르게 모든 메소드가 구현되어 있어야 한다.





클래스, 인터페이스, abstract 클래스의 차이 표


인터페이스

abstract 클래스

클래스

 선언 시 사용하는 예약어

interface

abstract class

class

 구현 안 된 메소드 포함 가능 여부

○(필수)


×

 구현된 메소드 포함 가능 여부

×


○(필수)

 static 메소드 선언 가능 여부

×



 final 메소드 선언 가능 여부

×



 상속(extends) 가능

×



 구현(implements) 가능


×

×



클래스 선언 예

public class Sample extends SuperClass implements InterfaceA, InterfaceB {
	
	/* 내용 생략 */
}



Sample이라는 이름을 가지는 클래스

 ● 파일 이름은 Sample.java
 ● 대문자로 시작하고, 추가 단어가 있을 경우에는 첫 문자만 대문자를 사용한다.





SuperClass라는 클래스를 확장

 ● extends 뒤에 부모 클래스의 이름을 명시하며, 반드시 하나의 클래스만 지정 가능하다.
 ● abstract 클래스도 extends로 확장할 수 있다.





InterfaceA와 InterfaceB를 구현함

 ● 한 개 이상의 구현할 인터페이스 이름을 명시한다.
 ● implements로 구현을 한다고 명시할 때에는 인터페이스에 선언된 모든 메소드가 이 클래스에서 구현되어야 한다.






인터페이스 선언 예

public interface InterfaceA {
	
	public void methodA();
	public void methodB();
}

 ● 구현되어 있는 메소드가 하나라도 있으면 안된다.


추상(abstract) 클래스 선언 예


public abstract class AbstractClass {
	
	public abstract void methodC();
	
	public void methodD() {
		
	}
}


 ● abstract로 선언된 메소드가 하나라도 있을 경우 클래스는 abstact로 선언되어야만 한다.



enum 클래스 선언 예

public enum EnumClass {
	
	THREE_HOUR(18000),
	FIVE_HOUR(30000),
	
	/* 중간 생략 */
}

 ● enum 클래스는 상수를 열거하기 위한 용도로 사용한다.
 ● enum 클래스의 상수는 이르만 정의해도 된다.

 ● 별도의 생성자를 만들어 각 상수의 값을 지정할 수 있다.
 ● 모든 enum 클래스의 부모 클래스는 java.lang.Enum 클래스뿐이다.
 ● enum에 메소드를 만들어 기능 추가 가능





어노테이션 선 언 예

import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationDefinition {
	
	public int number();
	
	public String text() default "This is first annotation";
}

 ● 대상(@Target)과 적용 범위(@Retention)를 명시하는 것이 더 좋다.

 ● @interface를 사용하여 어노테이션이라는 것을 명시한다.


 혹시나 이야기하면, interface나 abstract 클래스 모두 클래스 변수나 인스턴스 변수를 선언할 수 있으며, 구현 및 확장하는 클래스에서는 이 값들을 사용할 수 있다.

반응형