///
Search
🤢

최수용

날짜
2022/07/18
태그
Java
잔디
normal과 many 사이
속성

[JAVA]

제네릭 - generic
데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미
제네릭을 쓰는 이유
클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다.
반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.
배열을 만들때 배열에 여러 타입의 객체를 저장하고 싶어서 오브젝트로 지정해놓으면 꺼내올때 형을 지정해줘야된다. ex) System.out.println((Integer)list.get(1));
래퍼(wrapper) 클래스를 사용해야만 한다.
제네릭의 본질은 미완성 클래스이다. 사용할 때 완성시킨다. 새로운 클래스를 만든다고 보면된다.
List<Integer> list = new ArrayList<>(); - 새로운 제네릭 타입이 Integer인 리스트 클래스를 새로 만든다!
HashMap
선언 - Map<K, V> map = new HashMap<>();
유연성 - 알아서 늘어남.
사용 - map.put(”key”,value);
수정 - map.put(”key”,value2);
(V) data = map.get(”key”);
map.remove(”key”);
추상 클래스에서 추상 메서드와 구상 메서드 중 어떤게 많아야 좋을까?!
구상 - 이미 완성된 것.
추상 - 완성하지 못한 것.
추상이 많으면 자유도를 높인다. 보통 자유도가 낮은, 즉 완성된 메서드가 많은 추상 클래스를 더 좋은 클래스라고 한다.(추상 메서드가 있다는 것은 무조건 추상 클래스다.)
자유도를 높여서 써야될 때는 추상을 많이 쓰기도 한다.
인터페이스 - interface
그냥 클래스랑 똑같다. interface사람{}
추상성 100%.
인터페이스 안에 들어가는 모든 것은 다 추상이다. 즉 무조건 오버라이드 해서 사용.
private 사용 불가.
여러가지 인터페이스 같이 사용 가능.
class Main{ public static void main(String[] args) { } } interface 사람 { void 말하다(); void 걷다(); } interface 군인 { void 쏘다(); } class 케로로 implements 사람, 군인 { @Override void 말하다(){} @Override void 걷다(){} @Override void 쏘다(){} }
Java
복사
다중 상속은 왜 안될까?!
먼저 다중 상속의 폐해에 대해서 말해보자
오리가 흰오리와 고무오리에게 수영하다를 상속해주었다.
그리고 하이브리드 오리는 흰오리와 고무오리를 다중 상속 했다고 가정해보자.
이 때 하이브리드 오리는 수영하다라는 메서드를 3개를 가진다.(오리, 흰오리, 고무오리)
그럼 하이브리드 오리에게 하이브리드오리.수영하다() 를 했을때 하이브리드오리는 어떤 수영을 해야되는 것인가?!
물론 오버라이딩을 해주면 폐해를 막을 수 있다. 하지만 개발자들이 과연 무조건 오버리이딩을 할까? 이러한 경우를 막기위해 나온것이 인터페이스 이다. 무조건 오버라이딩을 해주어야 한다.