TIL(Today I learned)(279)
-
(TIL) 20221213/ 코틀린의 Collection
🏴Facts(한 것) & Findings(배운 것) * 자바에서 코틀린으로 Collection 파트 다시 읽기. 저번 스터디에서 5,6장을 다 하지 못했고(열띈 토론 덕에) 이참에 6장을 다시 읽으면서 새로운 것을 뽑아내려고 노력했습니다. 먼저 코틀린의 Collection 구조는 아래와 같습니다. Java와는 확연히 다른 상속 관계를 가지고 있다는 것을 알 수 있습니다. 기본적으로 가변 컬렉션으로 사용하는 자바와 달리 Kotlin은 불변 컬렉션(read-only) 컬렉션을 사용하고 있습니다. 그렇기에 상속구조가 위와 같은 것이죠. 불변 컬렉션의 사용은 부수 효과가가 생기는 것을 막을 수 있고, 의도치 않은 데이터 접근을 막을 수 있다는 장점이 있습니다. 덕분에 더욱 함수형 프로그래밍에 집중할 수..
2022.12.14 -
(TIL) 20221102, 테이블 연관관계의 역정규화
🏴Facts(한 것) & Findings(배운 것) 인턴을 하면서 배운 것이 몇가지 있는데, RDB상에서 연관관계가 있는 두 테이블을 반드시 매핑하지는 않는다는 것이다. 매핑을 하면 어떤 것이 가능할까? 한 쪽 테이블에서 반대쪽 테이블의 데이터를 읽을 수 있다. 그리고 생명주기를 같이하기 때문에 JPA의 orphan removal 등의 기능을 이용해서 데이터가 삭제됐을 때 다른 테이블이 데이터도 삭제 할 수 있다. 그럼 불편한 점은 무엇일까? 1. 관리해야할게 많아진다. 생명주기를 같이하는 경우가 많기 때문에 경우를 고려하며 작성한다. 2. 특정 필요한 데이터만 가져오고 싶어도, join을 하는 등 비용이 반드시 발생한다. 나는 2번째 문제에 대해서 집중했다. 책과 책에 대한 리뷰, 그리고 리뷰..
2022.11.03 -
(TIL) 20221027/ 책임에 따른 분리
🏴Facts(한 것) & Findings(배운 것) 가장 최근 TIL이 테스트하기 좋은 코드였다. 그리고 나는 책임 분리가 잘 되어 있는 코드가 테스트하기 좋은 코드라는 말을 했다. 그렇다면 어떤 코드가 책임 분리가 잘 된 코드일까? 우선 아래 코드를 보자. public class Calc { public String calc(List list) { int sum = 0; for(int i = 0; i ..
2022.10.27 -
(TIL) 20221019/ 테스트 하기 좋은 코드
🏴Facts(한 것) & Findings(배운 것) 테스트하기 좋은 코드는 어떤 코드일까? 오늘 테스트 코드를 작성하면서 문득 이런 생각이 들었다. 결국 테스트는 '이 메서드가 똑바로 의도대로 똑바로 동작하냐?'에 대한 답이라고 생각한다. 그러려면 첫 번째로 코드에 의도가 잘 드러나야 한다. 의도가 잘 드러난 코드는 무엇일까? 나는 '관심사 분리가 잘 된 코드'라고 생각한다. 관심사 분리라고하면 어렵게 생각하는 분들이 많으신데, 예를 들어, getUser라는 메서드는 User를 반환해주기만 하면 된다. 올바른 데이터가 들어왔는지 확인하고, 여러 방법으로 찾고 뭐 어쩌고 하는 것은 외부에서 봤을 때 getUser의 관심사가 아닌 것이다. 그렇기 때문에 getUser가 가지고 있는 여러 책임들을 마..
2022.10.20 -
(TIL) 20221013/ 토비의 스프링, 프로젝트 테스트 코드
🏴Facts(한 것) & Findings(배운 것) 토비의 스프링을 1장부터 다시 읽고 있다. 사실 토비님이랑 하는 같이 읽기를 신청했었는데, 초반에는 회사에서 일하느라 너무 바빠서 책 읽을 시간이 없었다. 지금은 여유가 생겨서 책을 읽고 있다. 1장에서는 객체지향에서 스프링 IoC/DI까지 가는 방식을 보여주고 있다. 예시가 DB 커넥션인데, 중복을 줄이고, 생성자 방식으로 의존관계를 주입함으로써 IoC 예제를 보여준다. 스프링은 @Bean이라는 어노테이션이 붙어있거나, @Component라는 어노테이션이 붙어있으면 스프링에서 객체를 싱글톤으로 생성한 후 application context, 즉 컨테이너에서 관리한다. 그렇기 때문에 의존관계로 객체를 생성할 수 있게 되고, 이 덕분에 객체의 유..
2022.10.14 -
(TIL) 20221011/Redis 데모 프로젝트
🏴Facts(한 것) & Findings(배운 것) 알고리즘 문제를 몇개 풀었다. 힙, DP 문제 몇개를 두고 한 두시간 씨름을 하니 3시였다. 힙 문제는 최소힙 문제다. 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 예전에 C++로 풀었을 때는 라이브러리에 priority_queue가 정의되어 있었기 때문에 푸는데 10분도 안 걸렸었다. 문제는 파이썬인데, 나는 Heapq를 써서 풀고 싶지 않았다. 적절한 알고리즘을 찾아서 문제를 풀었는데, 계속 시간초과가 발생해서 어쩔 수 없..
2022.10.13