객체지향 3

Socket을 활용한 채팅 네트워크 프로그램 객체지향을 곁들인...

이번 포스팅은 소켓을 직접활용해서 어떻게 클라이언트와 서버간의 연결을 통해 채팅 프로그램을 구현할 것이다이번 프로그램은 단순히 잘 동작만 하는것이 아닌책임, 역활, 협력의 관점으로 바라보며 코드를 작성하겠다.사용자들이 채팅을 하기 위해서 어떤 객체가 필요한지각 객체들이 어떤역활을 수행해야하는지 어떤 역활을 맡아야 하고 어떤 데이터를 책임져야하는지에 대해자세히 서술하고자 한다.이번 포스팅의 목적은 소캣프로그래밍에 대해 이해도를 높이고 또한 객체지향적인 시점을 얻기 위해 작성되었다.채팅 프로그램 설계서버에 접속한 사용자들은 모두 대화할 수 있어야한다.입장 /join | {name}처음 채팅 서버에 접속할 때 사용자의 이름을 입력해야합니다.이름 변경 /change | {name}사용자의 이름을 변경한다.전체 ..

Java 2025.03.16

[ITEM 18] 상속보다는 컴포지션을 사용하라

컴포지션은 합성을 뜻한다.  상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니다 잘못 사용하면 오히려 오류를 내기 쉬운 소프트웨어를 만들게 된다 확장을 할 목적으로 설계하였고 문서도 잘 정리가 되어있으면 괜찮다 하지만 구체 클래스를 패키지를 경계를 넘어, 즉 다른 구체 클래스를 상속 받는것은 위험하다.  상속은 캡슐화를 깨뜨린다 다르게 말하면 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스 동작에 이상이 생긴다. 바로 코드 예를 보자면 직접 HashSet을 상속 받은 코드 import java.util.Collection;import java.util.HashSet;import java.util.Set;public class InstrumentedHashSet extends HashSet ..

[ITEM 17] 변경 가능성을 최소화 하라

이번 이팩티브 자바에서 소개하는 챕처는 꽤나 긴편이다중복된 이야기가 자주 나오지만 그 이유는 중요하기 때문에 반복하고 강조하는것이다 해당 챕터를 읽고 내가 생각하는 조슈아 블로크가 독자들에게 전달하고 싶은 키워드는 바로 캡슐화이다.캡슐화는 모든 소프트웨어의 기본 근간이 되는 아주 중요한 개념이다 캡슐화를 통해 많은 장점을 가질 수 있다.  객체의 변경 가능성을 최소화 하면 코드의 변경이 유연하고 쉬워진다이렇게 들으면 뭔가 논리적으로 안맞는것 같지만 사실이다캡슐화를 통해 얻을 수 있는 가장 큰 장점 중 하나는 객체들간의 결합도를 낮출 수 있다.  책 OBJECT의 저자 조영호는 기능을 수정하는데 클래스 하나 이상 수정을 해야한다면 그건 결합도가 높다고 말하기도 했다. 결합도는 한 모듈이 변경되기 위해서 다..