Keep walking 👩🏻‍💻 465

[디자인패턴] Decorator pattern

Decorator Pattern 이란 기존 뼈대(Class)는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다. 즉, 객체에 추가적인 요건을 동적으로 첨가한다. SOLID중에서 개방폐쇄 원칙(OCP)과 역전 원칙(DIP)을 따른다. 쉽게 예시를 들면, 에스프레소 원액 (기존 뼈대 = Class)에 물을 첨가하면 아메리카노가 된다. 또는 우유와 시럽을 첨가하면 카페 라떼가 된다. 이와같이 기존 뼈대는 유지하되, 필요한 형태로 꾸밀때 상요하는 패턴이 Decoratr Pattern이다. 예시 자동차를 예시로 들어보자. ICar라는 인터페이스를 정의하고, 이를 구현하는 Audi 클래스를 두고, 이로 인해 audi라는 객체가 생성됐다고 가정하자. 그런데 만약 런타임 단계에서 audi의 특징을 그대로 두고 업그레이..

IoC(제어의 역전)와 DI(의존성 주입)

핵심 키워드 IoC는 Inversion of Control. 즉, 제어의 역전이라는 뜻이다. DI는 Dependency Injection, 즉, 의존성 주입이라는 뜻이다. 분리해서 이해해도 무방하지만, IoC와 DI모두 비슷한 의미를 가지고있어서 IoC 컨테이너 또는 DI 컨테이너라고 불린다. 요즘은 의존관계 주입에 초점을 맞추어 주로 DI 컨테이너라고 불린다. 둘의 공통적인 핵심 역할은 클라이언트의 코드 변경 없이도 기능이 확장이 가능하다는 특징이 있다. 이 둘을 이해하기 위해서는 아래 키워드들을 순차적으로 이해해야한다. Spring Container : 개발자가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤 해줌 Bean : 스프링 컨테이너에서 관리되는 객체 DI : 외부에서 객..

백준 1987번 알파벳 (C++)

문제 링크 : https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 문제 요약 1. r*c 크기의 2차원 배열에는 알파벳 대문자들이 적혀있습니다. 2. 시작지점은 배열의 좌측 맨 위쪽이며, 한번의 이동으로 왼쪽, 오른쪽, 위, 아래를 갈 수 있습니다. 3. 같은 알파벳은 두번 이상 지나갈 수 없습니다. 4. 최대한으로 많이 지나갈 수 있는 알파벳의 갯수를 출력하세요. 시작지점인 좌측 맨 위쪽도 지나간 칸에 포함됩니다. 핵심 포인트 전형적인 백..

백준 1522번 문자열 교환 (C++)

문제 링크 : https://www.acmicpc.net/problem/1522 1522번: 문자열 교환 a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 www.acmicpc.net 문제 요약 1. 문자열 s는 원형이기 때문에 처음과 끝은 서로 붙어있습니다. 2. 문자열 s에서 a를 모두 연속으로 만들기 위한 문자의 최소 교환 횟수를 출력하세요. 핵심 포인트 1. 문자는 1대1로 교환이 가능합니다. 즉, 'a''b'처럼 각각 1개씩 교환이 가능하며, 교환된 문자는 서로 자리가 바뀌게 됩니다. 2. 문자열의 최대 길이는 1,000입니다. 2중 for문을 돌려도 시간초..

SpringBoot의 Object Mapper

Object Mapper란? Object Mapper는 데이터의 형식을 변환해준다. Java에서는 보통 Jackson databind를 통해 테이터의 형식을 변환해준다. SpringBoot에서 ObjectMapper는 아래 예시와 같이 데이터의 형식을 변환해준다. Text(Json) -> Object Object -> Text(Json) 예를들어 아래와 같이 Controller내부에서 Object를 Json으로 바꿀 수 있다. @PostMapping("/json") public User json(@RequestBody User user){ return user; } /* 이때 Text타입은 API Platform에서 'Json'으로 지정해준다. */ 위 코드는 아래의 과정을 거쳐 Object를 Json으..

GET과 Query Parameter, POST와 Databody

GET과 POST의 차이 의미 CRUD * 멱등성 안정성 * Path Variable * Query Parameter Databody GET 리소스 취득 R O O O O X POST 리소스 생성, 추가 C X X O △ O * 멱등성 : 연산을 여러번 적용하더라도 결과가 달라지지 않음 * Query Parameter : 데이터를 처리하기위해 넘겨주는 여러가지 매개변수이며, 항상 ?가 붙음 [예시 - 아이디가 123인 user의 데이터를 가져온다] /users?id=123 * Path Variable : 데이터를 처리하기위해 URL / URI 경로에 변수를 넣어줌 [예시 - 아이디가 123인 사용자를 가져온다] /users/123 위 표를 해설하자면 아래와 같다. GET 요청 데이터를 읽어들이므로 R(R..

백준 20437번 문자열 게임2 (C++)

문제 링크 : https://www.acmicpc.net/problem/20437 20437번: 문자열 게임 2 첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다. www.acmicpc.net 문제 요약 1. 테스트 케이스 t개 만큼 문자열 w와 양의 정수 k가 주어집니다. 2. 문자열 w에서 어떤 문자를 정확히 k개 포함하고, 가장 짧은 연속 문자열의 길이를 구하세요. 3. 문자열 w에서 어떤 문자를 정확히 k개 포함하고, 문자열의 첫 번째와 마지막 글자가 해당 문자로 같은 가장 긴 연속 문자열의 길이를 구하세요. 핵심 포인트 슬라이딩 윈도우 기법을 활용하면 됩니다...

JRE, JDK, 그리고 JVM

JVM Java Virtual Machine의 약어 자바 가상머신이라고도 불린다. 자바 프로그램을 컴파일해서 나온 결과인 바이트코드를 실행시켜주는 가상 머신 JRE Java Runtime Environment의 약자로, 자바 실행 환경을 의미 JVM을 동작하는데 필요한 각종 자바 라이브러리를 담고 있다. (ex : JAR - 자바 클래스 파일과 여러 시소스 및 메타데이터를 하나의 파일로 모아서 SW나 라이브러리를 배포하기 위한 포맷) JDK Java Development Kit의 약자로, 자바 개발 키트를 의미 Java 개발자를 위한 개발 환경의 셋트 JRE와 javac 등의 컴파일러, 디버거 등 java 프로그래밍에 필요한 기능들을 포함하는 프로그램 오라클 사에서 제공하는 오라클 JDK와 오픈소스로 개..

백준 5972번 택배 배송 (C++)

문제 링크 : https://www.acmicpc.net/problem/5972 5972번: 택배 배송 농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는 www.acmicpc.net 문제 요약 1. 현서는 헛간 1에 있고 찬홍이는 헛간 N에 있습니다. 2.각 헛간에는 소가 있습니다. 3. m개의 횟수만큼 a에서 b로가서 마주치는 소에게 주어야할 여물 c가 주어집니다. 4. 현서가 찬홍이에게 가기 위해 사용해야하는 최소한의 여물의 비용을 구하세요. 핵심 포인트 다익스트라를 활용해서 쉽게 풀 수 있는 문제입니다. 여물의 비용을 결국 최단거리 비용으로 생각하면 됩니다. 문제 ..

POJO(Plain Old Java Object)와 POJO Framework

POJO란? 순수한 자바 오브젝트를 말한다. 즉, 외부의 종속성이 없는 단순한 자바 객체를 말한다.디자인패턴에 지대한 영향을 준 마틴 파울러는 단순 자바 객체를 쓰라는 말이 폼나지 않는 다는 반응을 들었다. 적당히 'POJO'라 명명하고 POJO를 사용하라 했더니 반응이 좋아서 해당 개념이 굳혀지게 되었다. 예를들어 아래와 같이 Getter, Setter로 구성된 가장 순수한 형태의 기본 클래스를 POJO라고 할 수 있다.public class Book { private String title; private String author; public Book() {} public Book(String title, String author) { this.title = title; this.author ..