본문 바로가기

전체 글374

커맨드 패턴(Command Pattern) 커맨드 패턴(Command Pattern) 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이다. 실행할 기능이 다양하면서도, 변경이 필요한 경우에 클래스를 변경하지 않고, 재사용할 때 유용하게 사용된다. 어떻게 보면 객체 간의 의존관계를 제거할 수 있는 패턴이라고 볼 수 있다. 말로는 어렵다… 직접 구현해보면서 커맨드 패턴을 이해해보자. 요구사항: 우리집에 Siri를 설치하기 당신은 당신만의 Siri를 집에 설치하기로 했다. 당신은 Siri에게 2 종류의 명령을 내릴 수 있다. order 예) 밥솥 켜 undo 예) 밥솥 꺼 우선, 당신이 명령할 수 있는 것은 밥통의 전원을 ON/OFF 할 수 밖에 없다. 클래스 분리 RiceCooker Class .. 2023. 5. 12.
Comparable과 Comparator 인터페이스 Comparable과 Comparator 인터페이스 우선, 사전적인 의미부터 알고가자. Comparable 인터페이스 int compareTo(T o): 해당 객체와 전달된 객체의 순서를 비교함. Java에서는 같은 타입의 인스턴스를 서로 비교해야만 하는 클래스들은 모두 Comparable 인터페이스를 구현하고 있다. 따라서, Boolean을 제외한 래퍼 클래스나, String, Time, Data와 같은 클래스의 인스턴스는 모두 정렬이 가능하다. Comparator 인터페이스 int compare(T o1, T o2): 전달된 두 객체의 순서를 비교함. Comparable 인터페이스와 같이 객체를 정렬하는 데 사용되는 인터페이스이다. 두 인터페이스의 추상 메서드를 구현하는 이유는 오로지 객체를 비교할 .. 2023. 5. 12.
[Java] 집합을 의미하는 Set 인터페이스 Set of Collections Framework Set은 집합이라는 의미를 가진다. 여기서 말하는 집합은 집합 안에 있는 요소들은 순서도 없고, 중복을 허용하지 않는 것을 의미한다. Java 진영에서의 이러한 의미를 가진 클래스를 제공한다. Collections Framework 중 하나인 Set이라는 인터페이스를 제공하며, 이를 구현한 3가지의 클래스를 다음과 같이 제공한다. Hash 알고리즘을 이용한 HashSet 이진 탐색 트리를 사용하여 오름차순 정렬까지 해주는 TreeSet Set에 순서를 부여해주는 LinkedHashSet 언제 Set을 사용하면 좋을까? 순서가 상관없고 중복을 허용하지 않는 상황이라면, 다음과 같은 상황이 될 수 있겠다. 집합 관련 문제로 풀어낼 수 있는 상황일 때 중복 .. 2023. 5. 11.
[Java] 옵저버 패턴(Observer Pattern) 옵저버 패턴(Observer Pattern) 옵저버 패턴이란? 객체의 상태 변화를 관찰하는 관찰자들(Observers)의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 각 옵저버에게 통지하도록 하는 디자인 패턴입니다. 하나의 Subject에 여러 Observer를 등록(register)해 두고, 통지(notify)를 하게 되면, 루프(for observer ..)를 순회하면서 각 Observer를 Update하는 패턴입니다. Observer 인터페이스 Observer는 Subject에 생긴 변화에 관심을 갖는다. public interface Observer { public void update(Subject theChangedSubject); } Subject는 Obse.. 2023. 5. 11.
HTTP Session 직접 구현 HTTP 쿠키(Cookie) 쿠키는 어떻게 생겼을까? 쿠키는 = 형태를 지닌 단순한 문자열이다. 서버와 브라우저는 기본적으로 HTTP 메세지 안에 이 쿠키를 담아서 주고 받게 된다. 서버는 어떤 쿠키를 브라우저에 저장하고 싶다면 해당 쿠키를 브라우저에 보내줘야 한다. HTTP 메시지에 Set-Cookie 라는 응답 헤더에 쿠키 정보를 명시하도록 한다. 여러 개의 쿠키를 보낼때는 다음과 같은 모습이다. Set-Cookie: = Set-Cookie: = Set-Cookie: = 이후, 클라이언트는 서버로 HTTP 메세지를 보낼 때, Cookie 헤더에 담아서 보낸다. 만약 여러개의 쿠키를 가지고 있다면 ;로 구분한다. Cookie: =; =; = 정리하자면, 서버는 동일한 쿠키를 기준으로 Set-Cookie.. 2023. 5. 10.
[Java] Function interface를 사용한 함수 구현 Function interface 위 사진은 Function 인터페이스에 대한 설명이다. Function 인터페이스에서는 apply 추상 메서드가 존재한다. 인자로 T를 받아 R을 리턴한다. 기본적인 내용이다. 앞으로 설명할 예제에는 람다식이 존재한다. 그렇다면, 람다식(Lambda Expression)에 대해서 알고 가자 람다식(Lambda Expression) 람다식(Lambda Expression)이란 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 이름이 없는 함수인 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다. 기존의 메서드를 선언하는 방식과 람다 방식의 차이를 코드로 살펴보자. // .. 2023. 5. 9.
[Java] Singleton Pattern / Lazy Singleton / Thread-Safe Lazy Initialization Singleton / Double Checked Locking Singleton / Enum Singleton / Bill Pugh Singleton Singleton Pattern 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 이를 구현하기 위해서는 다음과 같이 구현해야 한다. private 생성자: 외부에서 생성자를 호출해서 객체를 생성할 수 없도록 한다. static 인스턴스 변수: 해당 클래스의 단일 인스턴스를 보유한 변수를 생성한다. 생성 static 메서드: 생성된 인스턴스를 가져오는 메서드를 만든다. 인스턴스가 없으면 인스턴스를 생성한다. 위 내용으로 구현된 코드를 살펴보자. public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getinstance() { if (instance == null.. 2023. 5. 9.
[Java] 인터페이스 상속을 활용한 좌표계산기 기능 구현 해당 글은 NEXTSTEP 자바 플레이그라운드 with TDD, 클린 코드를 통해서 새롭게 배우고 내용을 기록한 글입니다. 좌표계산기(선 길이, 사각형 면적, 삼각형 면적) 기능 요구사항은 다음과 같다. 선 길이 X, Y좌표 모두 최대 24까지만 입력 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정 직선인 경우는 두 점 사이 거리를 계산해서 출력 출력 결과 사각형 면적 좌표값을 네 개 입력한 경우, 네 점을 연결하는 사각형으로 가정 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형만 허용하도록 검사 사각형인 경우 사각형의 넓이를 계산해서 출력 출력 결과 삼각형 면적 좌표값을 세 개 입력한 경우, 세 점을 연결하는 삼각형으로 가정 삼각형인 경우 삼각형의 넓이를 계산해서 출력 출력 결과 요.. 2023. 5. 8.
[Java] 정규식 / 커스텀 정규식 / find() 와 matches()의 차이에 대해서 정규식(정규표현식) 요구사항에 따른 개발을 진행하다보면 사용자로부터 입력한 값을 검증하거나, 입력한 값으로부터 특정 부분을 추출하는 상황이 빈번히 발생한다. 예를 들면, 요구사항은 다음과 같다. 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. "(1, 10)" x: 1 y: 10 "(5, 20)" x: 5 y: 20 "(3, 5)" x: 3 y: 5 java.lang.String 클래스의 split(), replaceALl() 등과 같이 문자열을 다루는 메서드를 사용해서 처리할 수도 있지만… java.util.regex 패키지에서 제공하는 Pattern 클래스와 Matcher 클래스를 사용하면 이를 해결해 보자. Pattern 클래스와 Matcher 클래스 우선, .. 2023. 5. 5.