반응형

분류 전체보기 489

[호호 스터디] DI와 서비스 로케이터 _객체지향과 디자인 패턴 Chapter 6

호호 스터디에서 Chapter 6: DI와 서비스 로케이터를 듣기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. DI와 서비스 로케이터 각 객체들을 사용하기 위해선 어떤 방법이 좋을까? 아무 생각없이 객체를 생성하고 의존하게 될 경우, Chapter 5에서 배웠던 DIP(의존 역전 원칙), OCP(개방 폐쇄 원칙), SRP(단일 책임 원칙) 등 SOLID 원칙을 어기게 되고, 변경에 유연하지 못한 코드가 만들어질 확률이 높다. 특히, 순환 의존이 발생할 경우, 요구사항이 수정되거나 변경될 경우 모든 객체의 코드를 수정해야 될 수도 있다. 이번 시간에는 DI(Dependency Injection), 서비스 로케이터를 이용한 객체 사용 방법에 대해 알아보도록 하겠다. Service Locator ..

[BOJ] 백준 24520. Meet In The Middle (Platinum IV)

알고리즘 중급 스터디에서 과제로 해결해야 했던 문제. 포인트를 놓쳐 생각보다 굉장히 많이 삽질했다. 문제는 아래와 같다. https://www.acmicpc.net/problem/24520 24520번: Meet In The Middle 첫 번째 줄에 마을의 수 $N$, 약속의 수 $K$가 주어진다. $(1 \le N, K \le 100\,000)$ 이어지는 줄부터 $N-1$개의 줄에 도로 정보를 나타내는 세 정수 $u$, $v$, $w$가 주어진다. $u$번 마을과 $v$번 마을 사이에 www.acmicpc.net 의식의 흐름 및 해설 N이 10만이기 때문에 DFS O(N)으로 모든 노드를 훑으면 시간초과이다. 따라서 특정 노드만 확인해주면 되는데, 정점들 사이의 거리는 LCA로 O(logn)에 구할 ..

PS/BOJ 2022.03.25

[220323] 블랙잭 미션 피드백을 통해 배운 점

이번 블랙잭 미션이 끝났다! 확실히 자동차 경주 미션, 로또 미션에 비해선 난이도가 올라간데다가, 리뷰어님께서 굉장히 많이 핀초리 피드백을 해주셔서 포스팅할 거리도 정말 많았다. (1단계 conversation 115개, 2단계 conversation 116개로 총 200개가 넘는 피드백 ㅎㅎ) 블랙잭 미션 주 내용 - Dealer, Player의 중복 로직을 줄이기 위해 interface 또는 abstract class를 익히고 활용해보는 시간을 가졌다. - 또한, 블랙잭 결과(Blackjack, Bust, Hit 등)에 따른 다양한 상태를 객체로 만들어 사용하는 상태패턴 또한 맛볼 수 있었다. 많은 피드백 중에서 내가 인상깊게 배운 점들을 뽑아서 정리해보려 한다. 전체 피드백은 여기서 볼 수 있다. ..

[220320] 우아한테크코스 4기 6주차 후기

우테코 활동을 한지 벌써 6주나 됐다니. 정신없이 바쁘게, 그리고 크루들이랑 재밌게 보내다보니 어느새 3월도 끝이 보이기 시작했다. 5~6주차 때 있었던 일들을 기록해보겠다 :) 데일리 브리조 오프라인 만남 최근에 브리조 멤버들 중 라쿤, 토닉, 필즈, 호호를 실제로 만났다! 3월 12일 토요일에는 건대 근처 거주하는 일부 브리조 멤버들과 오프라인 모각코 시간을 가졌다. 블랙잭 1단계 코드리뷰 피드백 반영을 하거나, 스터디 공부를 하거나, 백준을 풀거나 등등 각자 자신이 해야되는 공부를 직접 만나서 진행하고 객체의 책임과 역할, 이번 미션에서 DTO의 필요성, 추상클래스와 인터페이스 활용 여부, View와 도메인 로직 관련해서 토론도 함께 할 수 있었던 좋은 기회였다. 저녁에 선약이 있어서 17시쯤에 빠..

[호호 스터디] 설계 원칙: SOLID_객체지향과 디자인 패턴 Chapter 5

호호 스터디에서 Chapter 5: 설계 원칙: SOLID를 듣기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. SOLID 원칙 어떻게 보면 귀에 딱지가 앉을 정도로 많이 들어서 너무 뻔하게 느껴질 수 있다. 하지만 막상 코드를 짤 때는 자신도 모르는 사이에 잘 지켜지지 않는 경우가 많다. 애초에, 객체의 값을 꺼내지 말고 메시지를 던지라는 것조차도 코드를 짜다보면 잘 안지켜지는 경우가 많은 것처럼 말이다. 이번 포스팅에서 SOLID 원칙을 살펴보긴 하겠지만, 제일 좋은 건 실전을 통한 많은 경험을 해보는 것인 듯하다 :) 단일 책임 원칙 (Single Responsibility Principle : SRP) 클래스는 단 한 개의 책임을 가져야 한다. 객체지향적인 코드를 짜기 위해 최대한 책임..

[JAVA] VO(Value Object)로 원시값을 포장해보자

VO(Value Object)란, 도메인에서 속성들을 묶어서 값을 나타내는 객체이다. 사실 나는 VO에 대해서 단순하게 "도메인 중에서 가장 기본이 되는 객체" 정도로만 알고 있었는데, 이번에 우아한테크코스 미션을 진행하면서 VO 개념을 정립할 수 있었다. VO란 무엇일까? 사실 VO의 개념에 대해선 이 글이 정말 잘 정리가 돼있다. https://tecoble.techcourse.co.kr/post/2020-06-11-value-object/ VO(Value Ojbect)란 무엇일까? 프로그래밍을 하다 보면 VO라는 이야기를 종종 듣게 된다. VO와 함께 언급되는 개념으로는 Entity, DTO등이 있다. 그리고 더 나아가서는 도메인 주도 설계까지도 함께 언급된다. 이 글에서는 우선 다 tecoble...

[JAVA] Cache를 이용한 재사용으로 성능을 높이자

Cache(캐시)란, 자주 사용하는 데이터를 복사해놓은 임시 장소를 의미한다. 알고리즘에서 Dynamic Programming (DP)를 공부했다면 이해하기 수월할 수 있다. 나는 Cache를 이용하여 성능을 높이는 방법을 알고리즘 문제풀이에서만 사용해왔고, 실제 JAVA 개발에선 사용해본 적이 거의 없었는데, 이번에 우아한테크코스 미션을 통해서 캐싱을 할 기회가 생겨서 기록해보려 한다! 블랙잭 미션에서 캐싱이 필요한 이유 블랙잭 룰을 알고 있는가? 딜러와 플레이어들이 카드 (2~10, J, K, Q, A)를 가지고 카드들의 점수 합과 카드 개수로 승부를 겨루는 게임이다. 블랙잭에서의 카드 개수는 총 52개 (4개의 문양 * 13개의 숫자/알파벳)으로 이루어져 있으며, 참가자들은 이 카드들을 랜덤으로 나..

[호호 스터디] 재사용: 상속보단 조립_ 객체지향과 디자인 패턴 Chapter 4

호호 스터디에서 Chapter 4: 재사용: 상속보단 조립을 발표하기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. 이펙티브 자바 (아이템 18. 상속보다는 컴포지션을 사용하라) 내용과도 유사한 점이 존재한다. 상속을 통한 재사용의 단점 지난 포스팅에서 `상속이 정말 좋을까?` 라는 소주제로 글을 쓴 적이 있다. https://kth990303.tistory.com/280 [호호 스터디] 다형성과 추상 타입_ 객체지향과 디자인 패턴 Chapter 3 호호 스터디에서 Chapter 3: 다형성과 추상 타입을 발표하기 전에, 미리 책을 읽고 공부한 내용을 기록한 포스팅이다. 이펙티브 자바, 오브젝트 책에 적힌 내용과 유사한 내용도 많이 있어, 함께 읽 kth990303.tistory.com 상속을..

[220311][JAVA] 루키와 파랑과의 3인페어 협업미션 회고

이번 주에도 어김없이 페어 협업미션이 시작됐다. 나의 팀원은 누구일까 설렘반 긴장반으로 결과를 확인해보았다. 한번도 해보지 않은 3인 페어로 미션을 진행하게 되었다! 좋은건지 안좋은건지 예상이 되지 않아 조금 걱정도 됐지만, 페어들과 오프라인 일정을 잡으면서 서로 배려해주는 느낌을 받아 이번 미션도 크게 걱정없이 진행할 수 있겠다는 생각이 들었다 :) 3인페어의 장단점 3인 페어의 장점으론 보다 재밌게 소통하면서 개발할 수 있다는 점! 서로 얘기할 거리도 많고, 팀원들이 누구였는지, 자소서를 어떻게 썼는지, 평소에 어떤 개발을 해왔는지 수다떨면서 더 친해질 수 있었다. 3인페어다 보니 서로 주제가 끊임없이 많이 나오고, 대화가 끊기지 않아 더 친해질 수 있었던 듯 하다 :) 협업 마지막 날에는 파랑 크루..

[BOJ] 백준 15816. 퀘스트 중인 모험가 (Platinum IV)

추천받은 문제 중 하나. 입력 범위가 상당히 크기 때문에 꽤나 어려워 보이지만, 오히려 그러한 점이 힌트가 되는 문제. 문제는 아래와 같다. https://www.acmicpc.net/problem/15816 15816번: 퀘스트 중인 모험가 첫째 줄에 지금까지 달성한 퀘스트의 개수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄에 지금까지 달성한 퀘스트들의 번호 Q1 ... QN 까지의 N개의 수가 주어진다. (−1,000,000,000 ≤ Q[i] ≤ 1,000,000,000, Q www.acmicpc.net 의식의 흐름 및 해설 수의 범위가 굉장히 크기 때문에 O(N^2) 이상의 시간복잡도 풀이는 불가능하며, 입력받는 퀘스트 범위가 -10억 ~ 10억인 점, 요청으로 추가되는 퀘스트 개..

PS/BOJ 2022.03.12
반응형