출처 : 자바의신 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 클래스 모두 클래스 변수나 인스턴스 변수를 선언할 수 있으며, 구현 및 확장하는 클래스에서는 이 값들을 사용할 수 있다.
'JAVA > JAVA Programming' 카테고리의 다른 글
[JAVA] 자주 사용하게 되는 상속 (0) | 2015.02.26 |
---|---|
[JAVA] 메소드의 선언 (0) | 2015.02.26 |
[JAVA] 선언할때 사용할 수 있는 각종 제어자들 (0) | 2015.02.25 |
[JAVA] 아무나 사용 못하게 막아주는 접근 제어자 (0) | 2015.02.25 |
[JAVA] 변수의 종류 (0) | 2015.02.25 |