전략 패턴과 템플릿 콜백 패턴 템플릿 콜백 패턴은 전략 패턴을 발전시킨 형태이다. 전략 패턴은 보통 인터페이스와 그것들의 구현체(전략들, Strategy)를 생성해 놓고, Client 클래스가 구현체를 선택하여 그것을 실행시킬 Context 클래스에 주입하여 원하는 전략을 실행시키는 방식으로 구성된다. 이 패턴을 통해 여러 구현체를 만들어놓고, 상황에 따라 Client 클래스의 구현체 선택만을 바꾸는 방식으로 프로그램을 손쉽게 수정할 수 있다. 템플릿 콜백 패턴에선 전략 패턴과 다르게 전략들을 따로 만들어두지 않는다. 그 대신 익명 클래스를 사용해 Client 클래스에서 Context 클래스에 익명 클래스를 통해 전략을 바로 생성하여 주입한다. 템플릿 콜백 패턴을 통해 반복되는 로직을 뽑아내자 반복되는 ..
객체지향 생활체조 원칙에선 '모든 원시값과 문자열을 포장한다'라는 규칙이 존재한다. 객체지향적 설계를 위해 원시값을 포장해 얻는 이점이 무엇이며, 어떻게 사용하면 좋을까? 원시값을 포장하여 책임을 분산시키자 모의 로또 게임을 위한 값을 입력받는 상황을 가정하자. 원시값을 포장하면 아래와 같이 새로 입력받은 값에 대한 검증을 private List getLottoNumbers() throws Exception { List lottoNumbers = new ArrayList(); for (int i = 0; i < 6; i++) { int lottoNumber = readLottoNumber(); validateLottoNumber(lottoNumber); lottoNumbers.add(lottoNumber..
보통 HTTP의 대표적인 특성으로 무상태성(Stateless), 비연결성(Connectionless)를 들어 설명한다. 하지만 공부하던 중 HTTP는 Persistence Connection을 1.0부터 지원하고 있으며 심지어 1.1부터는 클라이언트의 별도 언급이 없다면 요청을 기본적으로 Keep-Alive로 취급한다. 1.1은 가장 대중적으로 사용되는 버전인데 Keep-Alive가 기본이라면 왜 HTTP는 Connectionless 하다고 하는 것인지 의문이 생겼다. https://en.wikipedia.org/wiki/HTTP_persistent_connection 의문에 대한 해답은 간단했다. HTTP persistence connection은 해당 HTTP 메시지를 주고받기 위한 TCP conne..
M1 Mac에서의 Python MediaPipe 설치는 전부터 알려진 문제들이 계속 발생하는 듯 하다. 2021년 상반기에 발견된 이슈에 대해 개발자들이 인지는 하고 있는 듯 하나 아직까지 해결되진 않은 듯... https://github.com/cansik/mediapipe-silicon 임시로 위의 mediapipe-silicon을 설치하여 사용하는 방법이 있긴 하다. 아래의 명령어를 통해 패키지 설치가 가능하긴 하나 업데이트에 따라 호환 문제가 생길 여지가 있음에 유의하여 사용하자. pip install mediapipe-python 본 글에서는 공식 페이지의 수동 패키지 설치 관련 오류에 대해 적는다. 설치 가이드를 따랐으나 아래와 같이 'opencv2/core/version.hpp' file n..
선수지식: [Java] - 람다식(Lambda Expression) 메서드 참조란? 메서드 참조(method reference)란 이미 존재하는 메서드 혹은 참조변수를 간결하게 지칭하는 방법이다. 람다식이 하나의 메서드만 호출하는 경우 그 식을 더 간결하게 나타내는 데에 쓰이며, 스트림 연산에서 빈번하게 사용된다. 이렇게 사용된 메서드 참조는 컴파일 단계에서 컴파일러가 알아서 람다식을 생성하여 처리된다. 사용법 람다식은 매개변수와 함수 몸체를 화살표(->)로 이어 구성했다면, 메서드 참조는 매개변수와 화살표, 소괄호를 제거하고 아래와 같이 쓴다. 클래스명(혹은 참조변수명)::메소드명 예시 1. Math.pow() 아래와 같이 Math.pow() 메서드의 람다식을 메서드 참조로 변형하여 사용 가능하다. p..
커밋 메세지 컨벤션(Commit Message Convention)은 무엇이며 왜 필요한가? Git을 사용해 관리하는 프로젝트가 커지다 보면 로그가 점점 길어지고, reset 혹은 revert를 해야 하는 상황에 원하는 시점을 정확히 찾는 것이 어려워진다. 이러한 상황에 커밋 메세지를 성실하게 작성해 놓았다면 아래와 같이 grep을 사용하여 로그들을 빠르게 찾아볼 수 있다. git log --grep "(검색어)" grep과 다양한 옵션을 추가해 검색을 잘 할 수 있더라도, 결국 커밋 메세지를 잘 적어놓지 않았다면 특정 커밋을 찾기란 매우 어렵다. 이외에도 커밋 메세지를 활용하여 수정 내역을 자동으로 규합하는 등 커밋 메세지의 용도는 다양하다. 특히나 대형 오픈소스 프로젝트에서 이러한 문제들은 매우 중요..
- Total
- Today
- Yesterday
- java switch case
- springboottest
- JPA
- GitHub Discussion 템플릿
- Spring
- Payload 암호화
- MySQL
- MySQL 이벤트 스케줄
- 생성자 주입
- stubbing
- Spring Boot Monitoring
- Jenkins 예약 배포
- Java
- JPA JSON
- Spring 테스트
- RandomPort
- Fromtail
- 의존성 주입
- 스프링
- multiplebagsfetchexception
- 자바
- invokedynamic
- 우테코
- logback-spring.xml
- 함수형 인터페이스
- GitHub Discussion
- 람다식
- GitHub Discussion Template
- 우테코 5기
- 우테코 프리코스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |