Interface
- 생성자가 없다 (단독 객체 생성 불가)
- 구현된 메소드는 가질수 없다 ( 추상 메소드만 가질수 있다 )
- 필드는 static final 상수만 가질수 있다.
- data type 의 역활을 할수 있다.
- interface type 의 참조값이 필요하면 구현(implements) 클래스를 만들어서 객체를 생성해야 한다.
- 클래스 상속은 단일 상속이지만, 인터페이스는 다중 구현이 가능하다
interface는 추상메소드만 사용하기 때문에 따로 abstract를 작성하지 않아도 된다.
메소드 형태가 온전하기 때문에 interface도 data type으로 사용가능하다 예시에서는 Remocon을 data type으로 사용 가능하다.
interface 는 상속받는 것이 아니라 구현한다고 하기 때문에 extends가 아니라 implements 예약어를 쓴다
final
javascript의 const와 비슷한 역할이다.
필드나 지역변수에 final 이라는 예약어를 붙이면 변수가 아니고 상수가 된다.
상수는 값이 변경되지 않는 것이 상수이다.
따라서 아래의 num, name, r2 에 다른 값을 다시 대입할 수 없다.
관례상 final 지역변수나 필드는 모두 대문자로 표기 한다.
숫자를 상수화 시키면 복잡한 숫자에 이름을 부여하는 효과를 준다.
문자열을 상수화 시키면 혼돈하기 쉬운 문자열에 이름을 부여하는 효과를 준다.
프로그래머가 복잡한 숫자나 혼돈하기 쉬운 문자열을 쉽게 불러다 쓸 수 있도록 도움을 준다.
상수는 문자열 보다 숫자가 데이터도 적게 사용하고 쓰기 편리해서 숫자 형태로 더 자주 쓰인다
클래스 상속은 단일 상속이지만, 인터페이스는 다중 구현이 가능하다.
interface의 필드는 static final 필드만 가질 수 있다. 이때 static final은 작성시 생략 가능하다.
메소드는 추상 메소드만 정의할 수 있다.
interface는 다중 구현이 가능하지만 예시에서는 한개만 구현(implements)하였다.
MainClass01 (final 상수화)
MainClass01의 예시들을 보면 final에 대한 이해를 할 수 있다. javascript의 const와 비슷한 역할로 변수를 상수화시킨다.
예시에서 작성한 변수들은 final로 작성했기 때문에 추후에 다른 값을 대입할 수 없다.
MainClass02 (interface를 inner class로 구현한 예시)
static class YourRemocon implements Remocon{}
첫번째 코드는 Remocon interface를 구현(implements)하여 YourRemocon 라는 inner class를 만든 것이다.
이때 부모 인터페이스인 Remocon의 추상메소드 up(), down()를 재정의(override)했다.
public static void main(String[] args){}
두번째 코드는 첫번째 코드에서 만들어둔 YourRemocon class를 객체생성해서 지역변수 r1에 담았다.
그리고 세번째 코드에서 작성한 useRemocon()메소드를 실행하는 코드를 작성했다.
public static void useRemocon(Remocon r){}
세번째 코드는 위치상 아래 있지만 두번째 코드보다 먼저 작성해도 좋다.
Remocon 인터페이스 type을 인자로 전달받는 static 메소드를 작성하였고 up, down 메소드를 실행하도록 작성했다.
MainClass03 (interface를 구현하여 사용한 익명클래스)
두가지 코드 모두 Remocon interface를 구현하여 익명클래스 사용한 예시이다. 익명클래스는 클래스 뿐만아니라 인터페이스를 구현하여 사용하는 것도 가능하다.
위의 코드는 익명클래스를 변수에 담아 사용하였고 아래 코드는 익명클래스를 변수에 담지 않고 일회성으로 사용하였다.
ArrayList
ArrayList는 자바에서 기본적으로 많이 사용되는 클래스이다.
ArrayList는 자바의 List 인터페이스를 상속받은 여러 클래스 중 하나이다.
일반 배열과 동일하게 연속된 메모리 공간을 사용하며 인덱스는 0부터 시작한다.
배열과의 차이점은 배열이 크기가 고정인 반면 ArrayList는 크기가 가변적으로 변한다.
'java' 카테고리의 다른 글
Step10_Interface(@FunctionalInterface, 메소드 표현식) (0) | 2022.08.01 |
---|---|
Step10_Interface (메소드 표현식) (0) | 2022.07.29 |
Step09_AbstractClass(inner class, 익명클래스) (0) | 2022.07.29 |
Step09_AbstractClass(abstract 사용 예시) (0) | 2022.07.29 |
Step09_AbstractClass(추상클래스, 추상메소드) (0) | 2022.07.29 |