////
Search
🏣

0718 백엔드위키 - 송용호

<JAVA>
제너릭
사용하는 자료형에 따라 클래스의 동작이 변할 때가 있다, 이럴때마다 별도의 새 클래스를 만든는건 심각한 중복을 유발한다.
→ 자료형을 변수처럼 바꿔 다루고 싶을 때 사용!
일반적으로 List 류 자료구조에 많이 사용된다.
예시 코드
//클래스 안에서 T라는 임시 자료형을 쓰겠다. class Archive<T>{ Object data; T getData(){ return (T)data; //T라는 임시 클래스로 형변환해서 리턴할테니, //반드시 제너릭을 명시해서 사용해야 한다. } }
Java
복사
제너릭을 사용해 클래스 선언하는건 클래스의 틀을 만드는 것.
→ 제너릭을 사용한 클래스는 미완성이다.
사용할 때 자료형을 명시해주면, 제너릭 자리에 그 자료형이 들어간 새로운 클래스를 만드는 것과 같다.
제너릭은 컴파일되면 치환되어 사라지기 때문에, 배열선언 등은 할 수 없다.
아니 사실 배열로 쓸 수 있다!
T[]는 사용 가능한 자료형
//<T> 제네릭이 찍혀있는 클래스일 때, T[] arr; arr = (T[])(new Object[5]); //이렇게 사용 가능하고 T[] getArr(){ return (T[])new Object[10]; } //이렇게 함수 반환형 등으로도 전부 사용 가능..!
Java
복사
배열과 ArrayList, HashMap 정리 → https://cdpn.io/pen/debug/YMGaGv
비교 정리 표 임베드
해쉬맵 구현하기
순서가 없고, 요소마다 index 대신 Key값이 별도 객체로 존재하는(일반적으로 String) List류 자료구조.
Key 값은 중복이 허용되지 않는다.(Unique)
직접 구현해본 코드
구상클래스 추상클래스 인터페이스 비교 정리 → https://cdpn.io/pen/debug/BEKJoZ
비교 정리 표 임베드
인터페이스
극한까지 추상화된 추상클래스라고 이해하면 쉽다.
혼자 정할수 있는게 제목뿐이다.
반드시 모든 요소가 추상이어야 함.
반면 추상 클래스는, 최대한 덜 추상적인게 좋다.
부모에 구상 요소가 많으면 자식수준에서 만들어야 할 게 줄어들기 때문.
상속처럼 사용하지만, implements 키워드로 사용한다.
implement → 구현. 구현한다. 구현받는다.
인터페이스 안의 메소드들은 Public 이 자동으로 붙는다.
자식 메소드에도 Public 해줄것
인터페이스의 강점 → 다중상속이 가능하다.
자바에서 다중상속을 막은 이유.
모호함이 발생할 위험이 커지기 때문이다.
A 가 B,C 를 상속받았을때, 양쪽 다 수영하다() 가 있으면, 어떤 수영하다를 수행해야 할지 모른다.
다중상속의 모호함은 오버라이딩으로 막을 수 있다.
일반 클래스는 오버라이딩이 필수가 아니다.
인터페이스는 오버라이딩이 필수이다.
즉, 인터페이스는 다중상속(구현)을 해도 상관없다.