///
Search
🏃🏻‍♂️

김동현

날짜
2022/07/18
태그
Java
잔디
속성

7월 18일(월)

Java 제네릭, 컬렉션 프레임워크, 인터페이스에 대해 개념적인 것을 학습하였다.

Java generic

제너릭이 필요한 이유
ArrayList를 직접 구현해서 쓴다고 할 때, 만약 그 안의 배열의 타입을 일정하게 정해놓는다면? 담을 수 있는 데이터 타입이 그 타입에 한정되게 되어 있다. 타입별로 ArrayList를 만들어야 하는 ‘번거로움’이 생기는 것이다.
단지, 타입만 다를 뿐인데, 새로 만들어야 할 필요가 있을까? 물론, 타입형 선언을 할 때, Object로 선언을 할 수 있다. 하지만, 오토 언박싱이 안되는 경우가 있어 불편함이 생긴다. 이러한 번거로움을 줄이기 위해서, 제너릭이 탄생한다.
타입형을 미정으로 두는 것이다. 클래스명<T> 와 같이 하는 것이다. 만약, 생성자 호출을 할 때, 타입형을 명시해주면, 그 타입을 넣고 쓸 수 있는 클래스가 탄생하는 것이다.
<제네릭을 사용하지 않으면>
class Main { public static void main(String[] args) { Int저장소 a저장소1 = new Int저장소(); a저장소1.setData(30); int a = a저장소1.getData(); System.out.println(a); Double저장소 a저장소2 = new Double저장소(); a저장소2.setData(5.5); double b = a저장소2.getData(); System.out.println(b); 사과저장소 a저장소3 = new 사과저장소(); a저장소3.setData(new 사과()); 사과 c = a저장소3.getData(); System.out.println(c); } } class Int저장소 { Object data; int getData() { return (int)data; } void setData(Object inputedData) { this.data = inputedData; } } class Double저장소 { Object data; double getData() { return (double)data; } void setData(Object inputedData) { this.data = inputedData; } } class 사과 { } class 사과저장소 { Object data; 사과 getData() { return (사과)data; } void setData(Object inputedData) { this.data = inputedData; } }
Java
복사
<제네릭을 사용한다면>
// 문제 : 제너릭을 사용해서 중복을 제거해주세요. class Main { public static void main(String[] args) { 저장소<Integer> a저장소1 = new 저장소<>(); a저장소1.setData(30); int a = a저장소1.getData(); System.out.println(a); 저장소<Double> a저장소2 = new 저장소<>(); a저장소2.setData(5.5); double b = a저장소2.getData(); System.out.println(b); 저장소<사과> a저장소3 = new 저장소<>(); a저장소3.setData(new 사과()); 사과 c = a저장소3.getData(); System.out.println(c); } } class 사과 { } class 저장소<T> { T data; T getData() { return (T)data; } void setData(T inputedData) { this.data = inputedData; } }
Java
복사

Java Hashmap

class HashMap { private Object[] keys; private Object[] datas; int size = 0; HashMap() { keys = new Object[100]; datas = new Object[100]; } void put(Object key, Object data) { int index = findMyIndex(key); if(index == -1){ keys[size] = key; datas[size] = data; size++; } else{ datas[index] = data; } } Object get(Object key) { Object v = null; int index = -1; for ( int i = 0; i < size; i++ ) { if ( key.equals(keys[i]) ) { index = i; break; } } if ( index != -1 ) { v = datas[index]; } return v; } int findMyIndex(Object key){ int index = -1; for(int i = 0; i < size; i++){ if(key.equals(keys[i])){ index = i; break; } } return index; } }
Java
복사

Java Interface

class 사람 implements 변호사, 의사{ public void 변호하다(){ System.out.println("사람이 변호"); } public void 진찰하다(){ System.out.println("사람이 진찰"); } } class 오랑우탄 implements 변호사, 의사{ public void 변호하다(){ System.out.println("오랑우탄이 변호"); } public void 진찰하다(){ System.out.println("오랑우탄이 진찰"); } } interface 변호사{ void 변호하다(); } interface 의사{ void 진찰하다(); }
Java
복사