본문 바로가기

전체 글158

팩토리 패턴(Factory Pattern) 코드에서 new를 사용하게 되면 인스턴스를 만드는 구상 클래스를 선택해야 됩니다. public Pizza orderPizza(String type){ if(type.equals("cheese")){ return new CheesePizza(); } if(type.equals("potato")){ return new PotatoPizza(); } } 객체 생성을 처리하는 클래스를 팩토리(Factory)라고 부릅니다. 팩토리는 디자인 패턴이라기 보다는 프로그래밍에서 자주 쓰이는 관용구에 가깝습니다. public class PizzaFactory { public Pizza createPizza(String type){ if(type.equals("cheese")){ return new CheesePizza().. 2023. 9. 14.
데코레이터 패턴(Decorator Pattern) 데코레이터 패턴은 객체에 추가 요소를 동적으로 더할 수 있습니다. 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있습니다. 구현 Component //인터페이스 사용해도 무방 public abstract class Beverage { String description = "제목 없음"; public String getDescription() { return description; } public abstract double cost(); } ConcreteComponent ConcreteComponent에 행동을 동적으로 추가합니다. public class Espresso extends Beverage{ public Espresso() { description = "에스프레소"; } publi.. 2023. 9. 11.
옵저버 패턴(Observer Pattern) 옵저버 패턴은 객체 간에 데이터나 상태의 변화를 관찰하고 한 객체의 변화를 다른 객체에게 알려줄 때 사용되는 패턴입니다. 주제를 나타내는 Subject 인터페이스와 관찰자인 Observer 인터페이스를 구현해볼까요? public interface Subject { void registerObserver(); //옵저버 등록 void removeObserver(); //옵저버 제거 void notifyObservers(); //옵저버에게 알림 } public interface Observer { void update(); } 구현체도 구현해볼까요? public class ConcreteSubject implements Subject{ private List observers; private int data.. 2023. 9. 7.
전략 패턴(Strategy Pattern) 전략 패턴은 특정한 작업 또는 알고리즘을 독립적으로 정의하고 이를 캡슐화하여 교환 가능하게 만드는 패턴입니다. 오리 클래스를 설계한다고 해봅시다. 오리에게 날 수 있는 기능과 울음소리를 내는 기능을 구현하려면 어떻게 해야 할까요? 나는 행동, 우는 행동에 대한 인터페이스를 정의하고 오리 클래스가 인터페이스를 가지고 있으면 됩니다. public interface FlyBehavior { void fly(); } public interface QuackBehavior { void quack(); } public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; ... } 그리고 인터페이스에 대한 구현체 클래스를 정의해줍니다.. 2023. 9. 6.
Java - JSON 파싱 JSON 형식으로 쓰여진 String을 Java 객체로 변환하려면 어떻게 해야 할까? JSON 라이브러리를 사용하면 된다. Java에는 대표적으로 Jackson, Gson 등의 JSON 라이브러리들이 있다. 의존성 추가 dependencies { // 다른 의존성들 implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.5' // 적절한 버전 사용 } 구현 import com.fasterxml.jackson.databind.ObjectMapper; public record JsonToJava() { private static final ObjectMapper MAPPER = new ObjectMapper(); public static JsonT.. 2023. 8. 3.
Redis란? 우아한 레디스 영상과 구글링을 참조해서 작성된 문서입니다. (https://youtu.be/mPB2CZiAkKM) Redis in-memory 자료구조다.오픈소스인만큼 수정해서 사용해도 상관없다.레디스가 서포팅하는 자료구조String, set, sorted-set, hashes, listHyperloglog, bitmap, geospatial indexStreamRedis의 자료구조는 Atomic하기때문에 Race Condition을 피할 수 있다.그래도 잘못짜면 발생 왜 Collection이 중요한가? Redis 사용처Remote Data StoreA, B, C 서버에서 데이터를 공유하고 싶을때한 대 에서만 필요하다면 전역 변수를 쓰면 되지 않을까?Redis가 아토믹 보장주로 많이 쓰는 곳들인증 토큰 .. 2023. 3. 17.
기본 단축키 기능 단축키 삭제 cmd + backspace 잘라내서 붙여넣기 cmd + alt + v 창닫기 cmd + w 앱닫기 cmd + q 캡처 cmd + shift + 4 붙여넣기용 캡처 cmd + control + shift + 4 미리보기 (+ 닫기) space 이모지 [control + command + space] or [fn] 강제 종료 cmd + option + esc 한/영키 capsLock (꾹) 2023. 1. 11.
Gradle이란? Gradle이란? 2012년에 출시된 Groovy를 기반으로 한 오픈소스 빌드 도구로, 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템이다. 빌드: 소스 코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 애플리케이션으로 만들어 주는 과정이다. 소스 코드 -> 실행 가능한 파일 라이브러리가 많아지면서 생긴 문제점 1. 라이브러리 다운, 추가 어려움 2. 개발자들 간의 버전 관리 어려움 3. 다운받은 jar 파일의 보안 위험 빌드 도구 - 계속해서 늘어나는 라이브러리를 자동 추가 및 관리 - 프로젝트를 진행하며 라이브러리의 버전을 쉽게 동기화 Groovy - JVM 상에서 실행되는 스크립트 언어 - Java와 유사한 문법 구조를 가지며, 호환성이 아주 좋다. 장점 프로젝트를 설.. 2022. 11. 3.
문자 인코딩이란? 컴퓨터에서는 모든 변수를 이진법으로 저장한다. 문자도 마찬가지다. ex) 아스키 코드 사람의 문자를 컴퓨터가 알아볼 수 있도록 바이너리 신호로 바꿔주는 걸 문자 인코딩이라 한다. 문자 인코딩에는 정말 많은 종류가 있다. 아스키 코드를 사용하지 못하는 이유는 한글이나 한자 등의 다른 언어들을 표현하지 못하기 때문이다. 반대로 유니 코드는 모든 문자를 표현할 수 있다(심지어 이모티콘까지). 이를 UTF-8로 인코딩해서 사용합니다. 문자 인코딩이란 이진코드를 컴퓨터에 저장하는 방식이다. ex) 00000001, 00000000 00000001(바이트 수를 다르게 함) 2022. 8. 11.
Intellij - commit 커밋 하시기 전에 commit changes 창에서 오른쪽 before commit 칸에 Update copyright 빼고 전부 체크 2022. 8. 1.