전체 글 39

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의 저자 조영호는 기능을 수정하는데 클래스 하나 이상 수정을 해야한다면 그건 결합도가 높다고 말하기도 했다. 결합도는 한 모듈이 변경되기 위해서 다..

[ITEM 16] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

간혹 단순히 여러 값을 담은 인스턴스가 필요한 객체를 생성할 때 이렇게 작성하는 경우가 있다.public class PointV1 { public double x; public double y;} 나의 경우에는 코딩테스트 코드 작성할때 getter, setter 메서드로 호출하는것이 너무 귀찮아서 이렇게 한적은 있지만실제로 어플리케이션 개발 때는 절대 사용하지 않는 클래스 설계다.. 이 코드의 문제점은 다음과 같다생성자를 통해 값을 셋팅하지 않아 필수값을 누락할 수 있다생성자를 통해 값을 셋팅하지 않아 x,y의 불변식이 무너질 수 있다.외부 공개 클래스인데 내부 상태를 완전히 노출되어 언제 객체가 이상하게 작동해도 이상할 점이 없다캡슐화의 이점을 얻을 수 없다. (객체의 자율성을 보장하지 못한..

[ITEM 15] 클래스와 멤버의 접근 권한을 최소화 하라

잘 설계된 컴포넌트와 어설프게 설계된 컴포넌트의 차이는 내부 구현 정보를 외부로 부터 얼마나 잘 숨겼느냐다정보은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다.  기본원칙은 간단하다 모든 클래스와 멤버의 접근성을 가능한 좁혀야 한다.  자바의 접근제한자는 다음과 같다public : 모든 곳에서 접근 가능protected : 같은 패키지에서는 자유롭게 접근 가능 | 다른 패키지에 있는 경우에는 하위 클래스(상속 관계)에서만 접근 가능.package-private :같은 패키지 내에서만 접근 가능, 다른 패키지에서는 접근 불가능.private : 해당 클래스에서만 접근 가능멤버 접근성을 좁히지 못하게 방해하는 제약 한가지 있다. 상위 클래스의 메서드를 재정의할 때는 그 접근 수준을..

자바 ExcutorService 프레임웍의 ExcutorCompletionService 활용

자바 1.7 이후 부터 개발자들은  ExcutorService 프레임웍을 활용하여 손쉽게 병렬 프로그램을 작성할 수 있다.이번에 소개할 ExecutorCompletionService 객체는 여러 비동기 작업을 실행하고, 완료된 작업의 결과를 순서대로 가져오는 클래스다위 소개에 언급한것과 마찬가지로 완료된 작업을 순서대로 가져와야 하기때문에 해당 작업을 객체는 Callable을 구현해야한다.  @FunctionalInterfacepublic interface Callable { V call() throws Exception;} 위처럼 제네릭으로 선언되어있는것 처럼 값을 반환 받을 수 있어야 한다.* Runnable 구현받은 작업은 제출한 값에 대해서 값을 받을 수 없다.  우선 이번예제는 각 이미지 ..

Thread 중단 및 종료

작업이나 스레드를 안전하고 빠르고 안정적으로 멈추게 하는 일은 어려운 일이다..자바에서는 스레드를 멈추게 하는 방법이 없다. 대신 interrupt라는 방법을 사용할 수 있다.  작업 중단 시나리오1. 사용자가 취소하기를 요청한 경우  : 사용자가 중간에 취소 버튼을 눌러 취소를 요청한 경우2. 시간이 제한된 작업 : 일정한 시간 내 답이 될만한 결과를 계속 찾다 제한된 시간이 지나면 나온 결과중 가장 최적의 해에 가까운 값을 반환 하고 나머지 는 작업을 취소하는 경우3. 애플리케이션 이벤트 : 원하는 결과를 얻기 위해 다양한 조건을 지정해 여러 작업을 동시에 실행시킨다. 특정 작업 결과를 얻었다면 나머지는 작업은 모두 취소하는 경우4. 오류 : 예상치 못한 오류로 진행 중이던 작업을 취소하고 현재 진행..

Java 병렬프로그래밍 chap 1

1. 서론 (왜 이 책을 읽게 되었는가) 스레드에 대해 김영한님의 강의를 보고 포스팅을 작성하며 여러 번 내용을 확인했지만,결국 스레드의 전반적인 큰 틀과 사용법 정도만 익힌 느낌을 받았다. 실무에서 사용하는 데 큰 문제가 없다고 생각했지만,제 개인적인 부족한 견해일 수도 있다는 생각에좀 더 깊이 파고들고자 이펙티브 자바의 저자 조슈아 블로크가 추천한 **“자바 병렬프로그래밍”**이라는 책을 읽기 시작했다.사실, IT 업계에서 유명한 모 기업에 근무하셨던 개발자 분이 추천해 주신 책이다. 그분의 말씀에 따르면, 이 책을 통해 내가 작성하는 코드가 Thread Safe인지 아닌지 판단할 기준을 마련해 주었다고 한다. 또한, 자바는 태생부터 병렬 프로그래밍을 염두에 둔 언어이다.그 증거로, 자바의 옛 컬렉션..

Java 리플랙션<Reflection>

# 1  리플렉션이란 자바 클래스가 제공하는 다양한 정보를 동적으로 분석하고 사용하는 기능을 리플렉션이라 합니다.리플렉션을 통해 프로그램 실행 중에 클래스, 메소드, 필드 등에 대한 정보를 얻거나, 새로운 객체를 생성하고 메서드를 호출하며, 필드의 값을 읽고 쓸 수 있습니다. 리플렉션을 통해 얻을 수 있는 정보는 다음과 같습니다. 클래스의 메타데이터 : 클래스 이름, 접근 제어자, 부모 클래스, 구현된 인터페이스등필드 정보 : 필드의 이름, 타입, 접근 제어자를 확인하고, 해당 필드의 값을 읽거나 수정할 수 있다.메서드 정보 : 메서드 이름, 반환 타입, 매개변수 정보를 확인하고, 실행 중에 동적으로 메서드를 호출 할 수 있다. 생성자 정보 : 생성자의 매개변수 타입과 개수를 확인하고, 동적으로 객체를 ..

Java 2025.02.21

시너지필름 계약 후기

시너지필름 계약 후기: 가성비와 편집력으로 선택한 이유 안녕하세요! 오늘은 제가 최근에 영상 촬영 및 편집을 맡긴 시너지필름에 대한 후기를 공유하려고 합니다. 사실 여러 곳을 고민했지만, 시너지필름을 선택한 이유는 확실한 몇 가지 핵심 포인트 덕분이었어요. 바로 가성비, 편집력, 후기가 많은 곳, 그리고 가격 대비 퀄리티였습니다. 1. 80만원 이하의 가성비 우리가 영상 촬영을 맡길 때 가장 중요한 요소 중 하나가 바로 가격입니다. 시너지필름은 80만원 이하로 제공되는 패키지가 있는데, 이 가격에 비해 퀄리티가 정말 좋았습니다. 비슷한 가격대에서 퀄리티가 떨어지는 곳들도 많았는데, 시너지필름은 가격대비 성능이 뛰어나서 더욱 끌렸습니다. 2. 좋은 편집력 시너지필름의 또 다른 큰 장점은 바로 편집력입니다...

카테고리 없음 2025.01.07