본문 바로가기
반응형

자바13

Mediator Pattern, 중재자 패턴 중재자 패턴이란? 객체들 간의 상호작용을 중재하는 패턴이다. 객체들끼리 직접 통신하는 방식이 아닌 중재자를 통해서 상호작용하도록 하는 방식이다. 항공기 관제탑을 보면 이해할 수 있다. 비행기끼리 통신을 할 수는 있지만 모든 통신을 각자 하게 되면 통신을 받지 못하는 비행기도 생기고, 통신이 매우 난잡해질 것이다. 그래서 모든 비행기들은 관제탑을 통해서 통신을 하면서 조율을 하게 된다. 중재자 패턴을 왜 사용해야 하는가? 객체 간의 결합도를 낮춰준다. 새로운 객체들을 도입할 수 있다. 단일책임원칙을 지켜 유지보수와 재사용을 쉽도록 만든다. 패턴을 언제 사용해야 하는가? 객체들이 서로 복잡하고 강하게 결합되어 있는 경우 객체들간 직접적인 상호작용이 코드를 복잡하게 만들어 유지보수가 어려운 경우 문제점 중재자.. 2024. 3. 7.
Iterator Pattern, 반복자 패턴 반복자 패턴이란? 컬렉션에는 리스트, 트리, 그래프 테이블 등등이 있다 리스트나 배열 같은 경우 단순히 반복문을 통해서 순차적으로 접근할 수 있지만 트리나 그래프 같은 경우 순회는 방법을 잡기 매우 애매해진다. 예를 들어 트리의 경우에도 깊이우선탐색, 너비우선탐색이 있으니 말이다. 이런 경우 이터레이터 패턴을 통해서 원소에 접근하는 방법을 추상화하여 이터레이터 패턴을 적용시킬 수 만 있다면 사용자가 원하는 방법으로 편하게 접근할 수 있게 된다. 접근하는 방법을 추상화하여 분리하였기 때문에 컬렉션의 내부 구조를 드러내지 않고 순차적으로 요소를 접근할 수 있게 된다. 패턴을 왜 사용해야 하는가? 컬렉션의 내부 구조를 숨길 수 있다. 즉, 내부 구조 및 순회방식을 알지 않아도 사용할 수 있다. 컬렉션의 구체적.. 2024. 2. 28.
Proxy Pattern, 프록시 패턴 프록시 패턴이란? 객체의 대변인 역할을 하는 객체를 만들어 제공하는 패턴이다. 그렇기에 프록시객체를 통해 접근을 제어하고 요청을 전달하며 전/후 처리를 수행하는 역할을 하게 된다. 예를 들어 우리가 은행에 가서 직접 거래를 하지 않고 ATM이라는 프록시를 통해 거래를 처리하는 것과 같다. 왜 사용해야 하는가? 원래 객체에 대한 접근 제어가 가능하다. 요청의 전처리나 후처리를 수행하여 로깅, 트랜잭션 관리 등의 기능을 추가할 수 있다. 원래 객체의 생성 비용이 높을 경우 프록시를 통해서 필요한 경우에만 객체를 생성하도록 하여 생성 비용을 절감할 수 있다 어떤 경우에 사용하는가? 접근 제어 혹은 전/후처리가 필요한 경우 지연로딩이 필요한 경우(객체의 생성 비용이 높은 경우) 문제점 프록시 객체를 추가해야 하.. 2024. 2. 15.
Flyweight Pattern, 플라이웨이트 패턴 플라이웨이트란? 메모리 사용량을 줄이기 위해서 사용된다. 수많은 객체를 생성할 때 객체들의 공통된 부분을 공유하여 메모리의 사용량을 줄일 수 있다. 예를 들어 배틀그라운X에서 나무, 총알, 파편등 많은 입자들을 각각 별도의 객체로 구현했다면 메모리가 매우 많이 필요하게 되어 사양이 매우 좋은 사람 빼고는 게임을 원활하게 진행하기 어려웠을 것이다. 이러한 부분을 플라이웨이트 패턴을 통해서 최대한 메모리를 적게 사용하도록 만들어서 슈퍼컴퓨터가 아닌 일반 사용자도 게임을 즐길 수 있게 된다. 왜 사용해야 하는가? 메모리 사용량을 줄일 수 있기 때문이다. 객체 생성 비용이 높은 경우 이를 줄여주어 성능 향상에 도움이 된다. 어떤 경우에 사용해야 하는가? 많은 수의 유사한 객체를 생성해야 하는 경우 메모리 사용량.. 2024. 2. 14.
Adapter Pattern, 어댑터 패턴 어댑터 패턴이란? 어댑터 패턴이란, 디자인패턴 중 구조적 패턴으로 서로 호환되지 않는 인터페이스들을 기존의 코드를 변경하지 않고 연결할 수 있도록 변환하는 디자인패턴이다! 마치 평소에 220V 플러그를 사용하는 우리가 해외로 여행 갔을 때 110V 플러그 '어댑터'를 사용하는 것처럼 기존에 사용하던 것을 변경시키지 않고 어댑터만 추가하여 변경할 수 있도록 해주는 것이다. 왜 사용해야 하나요? 기존 코드를 수정하지 않아 안정성을 유지할 수 있다 기존 코드를 그대로 사용할 수 있기에 개발 시간을 단축할 수 있다 서로 다른 클래스 간에 결합도를 줄여줄 수 있다 어떤 경우에 사용하나요? 이미 존재하고 있는 클래스나 라이브러리를 수정하지 않고 새로운 시스템에서 사용해야 할 때 사용할 수 있다 서로 다른 인터페이스.. 2024. 2. 1.
enum 클래스 활용하기 예전에는 enum을 잘 사용하지 않다가 최근에서야 enum 클래스를 활용하기 시작했다. 확실히 enum 클래스를 사용하면 코드만 읽고도 의미를 확실하게 알 수 있어 좀 더 좋은 코드가 되는 것 같다. enum을 좀 더 잘 활용하기 위해서 정리하는 시간을 한번 갖으려고 한다. Enum이란? enum클래스는 JDK 1.5에 나온 기능이다. 열거체를 정의할 수 있는 기능으로 상수를 클래스처럼 보이게 해 준다. 장점 비교할 때 실제 값뿐만 아니라 타입까지도 체크한다. enum의 상숫값이 재 정의되어도 다시 컴파일할 필요가 없다. enum 정의 enum 열거체이름{ 상수1이름, 상수2이름, 상수3이름, ... } 상수를 작성할 때는 대문자를 사용하여 작성한다. ;을 붙이지 않는다. 예시 enum Rainbow{ .. 2023. 9. 6.
Java 로깅 알아보기 2 - logback 2023.08.04 - [자바(Java)] - Java 로깅 알아보기 1 - Logging이란 기본적인 내용은 이전 글을 통해 확인하는 것을 추천! Log4j 구조 Logger : 로그의 주체, 로그의 메시지 전달, 특정 패키지 안의 특정 레벨 이상만 출력 Appender: 어디에 출력할지에 대해 기술 Encoder: 어떻게 출력할지에 대해 기술 Logback 환경 설정 (logback.xml) resources 하단에 logback.xml 파일 생성 %d{yyyy-MM-dd HH:mm:ss} %highlight([%-5p]) --- [%F]%M\\(%L\\) : %m%n 속성 설정 appender 부분은 출력위치를 결정해 주고 (STDOUT), Appender로 사용할 클래스를 설정해 주는 부분이다. .. 2023. 8. 4.
Bean, VO, DTO, Entity 구분하기 개발을 하면서 데이터를 다루기 위해서 여러 종류의 클래스들을 사용하게 되는데 대표적으로 Bean, VO, DTO, Entity 등이 있다. 이것들을 구분하여 언제 사용해야 하는지 알아보는 시간을 가져보았다. Bean Bean은 Java Bean과 Spring Bean으로 나눠지는데 조금 다른 의미가 있어 구분할 필요가 있다고 생각한다. Java Bean 자바로 작성된 소프트웨어 컴포넌트 클래스로 동작하기 위해 따라야할 몇 가지 관례가 있다 클래스는 직렬화되어야 한다.(클래스의 상태를 지속적으로 저장 혹은 복원시키기 위해) 클래스는 기본 생성자를 가지고 있어야 한다. 클래스의 속성들은 get, set 혹은 표준 명명법을 따르는 메서드들을 사용해 접근할 수 있어야 한다. 클래스는 필요한 이벤트 처리 메서드들.. 2023. 7. 26.
Prototype Pattern, 프로토타입 패턴 프로토 타입 패턴이란? 객체를 생성할 때 기존 객체를 복제하여 새로운 객체를 생성하는 방법을 제공하는 패턴이다. 이를 통해서 객체의 복잡한 생성 과정을 피하고, 기존 객체의 상태를 유지하며 새로운 객체를 생성할 수 있게 된다. 프로그래밍에서 변경이 일어나는 부분을 캡슐화한다는 따른다. 왜 사용하나요? 객체 생성 과정이 복잡하거나 시간이 많이 걸릴 경우, 기존 객체를 복제하여 새로운 객체를 생성하는 것이 효율적이기 때문이다. 객체의 클래스에 종속되지 않고, 복제를 통해 동적으로 객체를 생성할 수 있다. 객체의 상태를 유지한 채 다양한 상태의 객체를 생성할 수 있다. 언제 사용하나요? 객체 생성 비용이 크고 유사한 객체를 자주 생성해야 할 때 객체의 클래스 계통이 복잡하고 변경이 빈번하게 일어날 때 문제점 .. 2023. 7. 11.
반응형