자바 객체생성(?)에 대하여
조회수 1626회
자바에서 객체를 생성할 때
Box<String> box = new Box<>();
와 같이 Box-Box를 사용 할 때가 있고
Set<String> set1 = new HashSet<>();
와 같이 Set-HashSet을 사용 할 때가 있더라구요.
1.상속때문에 Set-HashSet을 사용하는것 같은데 2.HashSet은 이미 Set을 상속 받고 있는상태라 HashSet<String> set1 = new HashSet<>();
를 사용하면 상관 없지 않나요? 3.Set-HashSet을 사용해야 되는 이유가 뭔가요?
1, 2, 3 질문을 풀고 싶어요. 다른 틀린부분이 있다면 설명해주세요.
1 답변
-
객체지향에 대한 이해가 필요한 질문입니다.
예를들면 모든 동물은 먹고 잡니다. 다만 방법은 동물마다 다를뿐이지 행위 즉 먹는다 잔다는 다 해야 하는 행위입니다.
Animal tiger = new Tiger(); Animal lion = new Lion(); // 행위를 추상화함 public void processEat(Animal animal){ animal.eat(); } public void processSleep(Animal animal){ animal.sleep(); } processEat(tiger); processSleep(tiger); processEat(lion); processSleep(lion);
Tiger tiger = new Tiger(); // 동물마다 행위를 생성함 public void processEat(Tiger tiger){ tiger.eat(); } public void processSleep(Tiger tiger){ tiger.sleep(); } Lion lion = new Lion(); public void processEat(Lion lion ){ lion.eat(); } public void processSleep(Lion lion ){ lion.sleep(); } ... ...
두번째 얘제의 경우 먹고 잔다를 실행해야 하는 동물이 천마리라면? processEat, processSleep 를 천개 만들어야 합니다.
그러나 첫번째 예제라면 추상화가 되어 있기 때문에 즉 모든 동물은 Animal 을 implement 했기 때문에 수행은 하나의 메소드로 가능해집니다.
만약...prcessEat 메소드를 수정해야 되는 경우가 발생한다면...두번째 예제 방식이면 천개의 메소드를 수정해야 됩니다.
객체지향의 잇점을 한번 고민해보시기 바랍니다.
댓글 입력