컬렉션 프레임워크(Collection FrameWork)
컬렉션 프레임워크란
앞서 배열은 연관되어있는 데이터를 그룹핑해서 관리하기 위한 수단 이라고 배웠었다.
그러나 배열이 가지고 있는 한계(배열의 크기)가 있고 이를 보안한 도구가 컬렉션 프레임워크다.
컬렉션 프레임워크 중 하나인 ArrayList를 살펴보자
public static void main(String args[]){
String[] arrObj = new String[2];
arrObj[0] = "one";
arrObj[1] = "two";
arrObj[2] = "three"; //컴파일 에러 1.
ArraryList al = new ArraryList();
al.add("one");
al.add("two");
al.add("three");
for(int i =0 ; i<al.size(); i++)){
String value = al.get(i);//컴파일 에러 2.
System.out.println(value);
}
}
- 위에 코드에서 위에는 일반적인 배열이고 밑에는 ArrayList로 작성하였다.
- add메서드를 통하여 리스트에 인자로 전달된 객체를 추가하고, get(int index)로 인덱스 위치에 있는 객체를 리턴받는다.
- 분명 al.add("one")에서 문자열을 추가 시켰다고 생각했다. 그래서 문자열을 담으려고 했고 그러나 컴파일에러가 난이유는 add 메소드는 어떠한 형태의 데이터타입도 수용할 수 있는 형태의 메소드이기 때문에 인자값이 Object여야한다. 왜냐하면 Object는 모든 데이터 타입의 조상? 이기때문이다. 그래서 형변환을 통해 (String)al.get(i) 데이터 타입을 맞춰주어야한다.
그러나 (String)al.get(i) 이방식은 옛날 방식이고
타입의 안정성이 떨어진다고 하여
컬렉션 프레임워크에서 제네릭이라는 문법적 수단을 채택
ArraryList<String> al = new ArraryList()<String>;
al.add("one");
al.add("two");
al.add("three");
for(int i =0 ; i<al.size(); i++)){
String value = al.get(i);
System.out.println(value);
}
인터페이스
- 인터페이스란 .. 개발코드와 객체가 서로 통신 하는 접점이다.
- 개발 코드는 객체의 내부구조를 몰라도 인터페이스의 메소드만 알고있으면된다.
인터페이스 역할
- 개발 코드가 객체에 종속되지 않게 하여 객체를 교체 할 수 있도록 함.
- 개발 코드 변경없이 리턴 값 또는 실행 내용이 다양해 질수있다.(다형성)
인터페이스 구성멤버
- 상수, 추상메소드
- Java 8 부터는 default 메소드, 정적 메소드
상수 필드 선언
- 인터페이스는 상수 필드만 선언가능
- 인터페이스에 선언된 모든 필드는 public static final(상수)의 특징을 가짐
- 상수명은 대문자
- 선언과 동시에 초기화 (static 블록을 작성할수없으므로}
추상 메소드 선언
- 인터페이스의 메소드는 기본적으로 실행 블록이 없는 추상 메소드로 선언한다.
- public abstract를 생략하더라도 컴파일 과정에서 자동적으로 붙음
public interface RemoteControl{
int MAX_VOLUME = 10;
int MIN_VOLUME =0;
public abstract void turnOn();
void turnOff(); //public abstract 생략
void setVolume(int volume); //public abstract 생략
}
디폴트 메소드 선언
- 자바 8 에서 추가된 인터페이스의 새로운 멤버
- [public]이 기본타입으로 default를 붙어야 생성된다.
public interface RemoteControl{
default void setMute(boolean mute){
if(mute){
System.out.println("무음 처리");
}else{
System.out.println("무음 해제");
}
}
정적 메소드 선언
public interface RemoteControl{
static void emptyBattery(){
System.out.println("배터리가 다 소모 되었습니다.");
}
}