개발 177

[Java][디자인 패턴] 4. 추상 팩토리 패턴 (Abstract Factory Pattern)

디자인패턴 [Java][디자인 패턴] 4. 추상 팩토리 패턴 (Abstract Factory Pattern) 추상 팩토리 패턴은 팩토리 메서드 패턴을 확장한 패턴이다. 추상 팩토리 패턴이란? 추상 팩토리 패턴은 팩토리 메서드 패턴을 확장한 패턴이다. 이 말은 즉슨, 팩토리 메서드를 여러 개를 만들고 그룹핑해서 하나로 관리할 수 있도록 만든 게 추상 팩토리 패턴이라고 볼 수 있다. 팩토리 패턴 vs 팩토리 메서드 패턴 vs 추상 팩토리 패턴 팩토리 패턴 vs 팩토리 메서드 패턴 추상화의 여부로 알 수 있다. 팩토리는 바로 클래스들의 생성을 한 곳에 모아서 new로 관리해주고, 팩토리 메서드는 추상화한 상위 클래스 아래에 하위 클래스를 두고, 실제 객체의 생성은 하위 클래스에게 위임한다. (선언과 구현을 분..

[Java][디자인 패턴] 3. 팩토리 메서드 패턴 (Factory Method Pattern)

디자인 패턴 [Java][디자인 패턴] 3. 팩토리 메서드 패턴 (Factory Method Pattern) 팩토리 메서드 패턴은 팩토리 패턴의 확장 패턴으로, 팩토리 패턴과 템플릿 메서드 패턴이 결합된 패턴이다. 팩토리 메서드 패턴이란? 팩토리 메서드는 추상화 기법을 사용하여 패턴을 확장한다. 추상화를 사용하면 아직 실제 내용이 구현되지 않은 상태에도 미리 메서드를 호출하여 사용할 수 있다. 팩토리 메서드 패턴은 객체를 생성하는 뼈대를 형성할 때 자주 응용한다. 팩토리 메서드는 추상화를 통해 하위 클래스에 다형성을 부여한다. 팩토리 메서드 패턴은 클래스 결합도가 낮고 유연성이 좋다. 또한 기능 개선 시 기능을 보완하기 위한 리팩터링 작업도 관리한다. 팩토리 메서드 패턴 vs 팩토리 패턴 팩토리 패턴 객..

[Java][디자인 패턴] 2. 싱글턴 패턴 (Singleton Pattern)

디자인 패턴 [Java][디자인 패턴] 2. 싱글턴 패턴 (Singleton Pattern) 싱글턴은 생성 패턴으로, 다른 생성 패턴과 달리 클래스에서 하나의 객체만 생성할 수 있도록 제한하는 패턴으로, 생성된 객체는 공유되어 어디서든 접근할 수 있다. 싱글턴 패턴은 언제 사용할까? 공유 자원 접근 복수의 시스템이 하나의 자원에 접근할 때 유일한 객체가 필요할 때 값의 캐시가 필요할 때 싱글턴 패턴에서는 어떻게 객체를 하나로 보증할까? 생성자의 접근 속성을 private으로 하여 외부에서 생성자에 접근할 수 없도록 한다. 내부 참조체를 통해 자신의 객체를 보관하고, new 키워드 대신 객체 생성 메서드를 호출하여 객체를 가져온다. 이때, getInstance 메서드는 정적 메서드로 만들고 객체가 없을 경..

[Java][디자인 패턴] 1. 팩토리 패턴 (Factory Pattern)

디자인패턴 [Java][디자인 패턴] 1. 팩토리 패턴 (Factory Pattern) 객체 생성 과정을 담당할 별도의 클래스를 선언하여 생성되는 객체의 구조를 느슨한 관계로 변경할 수 있다. 팩토리 패턴이란? 팩토리 패턴은 객체 생성 과정을 분리하여 처리한다. 객체 생성 과정에서 발생하는 new 키워드의 문제점을 해결하고 느슨한 객체 생성을 관리할 수 있다. 팩토리 패턴과 프록시 패턴을 결합하면 객체 생성을 위임받을 때 권한에 따라 접근하는 것을 제어할 수 있다. 단순 팩토리 패턴은 메서드를 통해 객체 생성을 관리할 수 있다. 팩토리 패턴 구조 예제 코드로 작성한 Coffee를 Americano, CafeLatte, VanillaLatte와 같은 종류별로 생성하는 CoffeeFactory라는 예제 코드..

[Github] Git Commit 이력 변경 - 작성자(Author), 커밋 날짜(CommitDate) 변경하기

Git Git Commit 이력 변경 - 작성자(Author), 커밋 날짜(CommitDate) 변경하기 Github 레포에 공부하고 코드를 작성해서 올리다가 히스토리를 확인했다. 아차.. 일도 개발 공부도 회사 PC로 하다 보니 레포에 커밋들이 회사 Github 계정으로 들어갔다. 개인 계정으로 넣을 레포를 생성했으면 로컬 git config를 개인 계정으로 변경하고 했어야 하는데... 이와 같이 Commit 작성자(Author)를 잘못 넣은 경우나 실제 코드는 이전에 작성했는데 깜빡하고 커밋을 안 해서 같은 날 여러 개를 올리게 되어 Commit 날짜를 변경하고 싶은 경우 아래와 같이 수정하면 커밋 이력을 변경할 수 있다. 1. Git Config 작성자 변경 1. git config로 해당 레포의 ..

개발/Git 2022.01.31

노션 데이터베이스 달성률 작성하기 (소수점 버림)

0. 개요 노션 데이터베이스에 특정 데이터의 비율을 작성하고 싶은 경우 유용하게 사용할 수 있다. 내 경우에는 “올해 모은 목돈 / 목표 저축액”의 비율을 달성률로 작성하고 싶어 사용했다. 1. 데이터베이스에 속성을 수식으로 작성 데이터베이스의 속성을 수식으로 선택한다. 그리고 수식 편집을 이용하면 데이터베이스 내 값들을 활용하여 다양한 값을 추출해 낼 수 있다. 2. 수식 작성 기본적으로 prop으로 데이터베이스에서 가져올 값을 선택하여 비율을 구할 수 있다. 예를 들어, prop(“올해 모은 목돈”) / prop(“올해 목표 저축액”) 으로 각 필드를 가져와 나누면 비율을 구할 수 있으나 소숫점까지 표현되어 값이 지저분하게 표기된다는 문제가 있다. 3. 소수점 버리기 수식 작성 소숫점이 함께 작성되는..

개발/꿀팁 2021.12.28

노션 웹 클리퍼 사용하기

1. 개요 최근에 노션으로 갈아타면서 이제 막 노션 꾸미기에 빠져있다. 이중 가장 손꼽아 좋다고 생각하는 기능은 웹 클리퍼 기능과 데이터베이스 기능인데, 두 기능을 활용해서 매일 개발하다 모르는게 생겨서 구글에 검색하고 찾았다가 나중에 똑같은 문제로 다시 보려는데 어떤 사이트인지 까먹어서 다시 또 구글에 검색하고 있는 우리의 소중한 시간을 아끼기 위해 노션의 웹 클리퍼 기능을 활용해보자. 2. 노션 웹 클리퍼란? 노션 웹 클리퍼 기능은 노션을 써본 사람이라면 한번쯤 써봤을 법 하다. 이 기능을 사용하면 웹 사이트를 그대로 가져와서 노션에 저장해주고, 클리핑한 글을 자동으로 정리해줄 수도 있다. 예를 들면 클리핑한 글들에 속성을 주어 Java, Kubernetes, Spring 등 자신이 관심있어하는 주제..

개발/꿀팁 2021.11.27

[Spring Cloud] Hystrix 파헤치기

Hystrix Hystrix란? MSA 분산 시스템인 Spring Cloud에서는 개발자가 분산 시스템에서 사용하는 공통 패턴을 제공한다. 예를 들면 Routing, Circuit Breakers, Routing, Configuration Management 등이 있는데 이 중 Hystrix는 Circuit Breaker 역할을 한다. 물론 Hystrix는 현재 Spring Cloud에서 fade out 되어 Resilience4j 사용을 권고하고 있지만 현재 회사에서는 Hystrix를 사용하고 있기 때문에 Hystrix 부터 정리해본다. Resilience4j도 비슷하겠지..? 예를 들어, 쇼핑몰을 MSA와 같이 분산 환경을 구성하다가 다음과 같은 도메인이 있다고 생각해보자. 어떤 회원이 주문내역을 확..

개발 2021.11.07

[Golang] Go 언어 빠르게 훑어보기

Go 언어 빠르게 훑어보기 기본 문법 기본 구조 package main import "fmt" func main() { fmt.Println("Hello Go") } $ go run hello.go선언 var foo int // 초기화 없는 선언 var foo int = 42 // 초기화 있는 선언 var foo, bar int = 42, 1302 // 한 번에 여러 var 선언 및 초기화 var foo = 42 // 생략된 type, 유추되어 들어간다. foo := 42 // 축약형, func 본문에서만 var 키워드 생략, 암시적 type const constant = "This is a constant" // 상수 선언 함수 // 간단한 함수 func functionName() {} // 매개변수가..

개발 2021.10.26

gradle

Gradle 1. Gradle 이란? groovy를 기반으로 한 오픈소스 빌드 도구 ant의 자유도와 maven과 같은 구조화된 build 프레임워크를 바탕으로 이전 빌드툴의 단점을 보완하여 개선된 서비스를 제공한다. Gradle 종속성 관리 2. Gradle vs Maven 왜 사람들은 Maven에서 Gradle로 옮겨갔을까? Gradle이 Maven에 비해 좋은 점은 어떤 것이 있을까? 2.1 Maven pom.xml에 프로젝트에 필요한 모든 dependency를 설정해주면 직접 다운로드 받을 필요 없이 maven이 repository에서 필요한 모든 파일들을 해당 프로젝트로 불러와준다. 특징 Dependency를 관리하고, 표준화된 프로젝트를 제공한다. XML, remote repository를 가..

개발 2021.08.16