전체 글 168

[Effective Java] 아이템 51 : 메서드 시그니처를 신중히 설계하라(feat. 팀 컨벤션)

0. 들어가며 이번 아이템을 살짝 훑어보면, 좋은 메서드를 만들기 위한 규칙을 설명합니다. 먼저 규칙들을 설명하기에 앞서, 규칙들을 왜 제안하는지 생각해봤습니다. 일관성 없는 메서드명 메서드가 너무 많아서 뭘 써야할 지 모르는 상황 매개변수가 너무 많아서 헷갈리는 상황 대표적으로 이런 경우들로 생각해볼 수 있고, 아마 다들 한번쯤은 겪어보셨을 것이라 생각합니다. 이제 필자가 어떤 규칙들을 제안하고, 그 규칙들을 지키면 위와 같은 상황을 해결할 수 있는지 살펴보겠습니다. 1. 메서드 시그니처 규칙 필자가 제안한 메서드 시그니처 규칙은 다음과 같습니다. 메서드 이름을 신중히 짓자 표준 명명 규칙(아이템68)을 따르자 같은 패키지 속의 다른 이름들과 일관되게 짓자 개발자 커뮤니티에서 널리 받아들여지는 이름을 ..

Java 2023.02.21

[Effective Java] 아이템 46 : 스트림에서는 부작용 없는 함수를 사용하라

0. 들어가며 스트림에서 '부작용 없는 함수'를 사용하라는 말은 무슨 뜻 일까요? '부작용' 이라고 번역된 단어는 원서는 'Side effect' 입니다. 즉, 이 함수의 인해 '다른곳에 영향을 끼치지 않는 함수'를 스트림에서 사용해야 한다는 뜻이 됩니다. 1. 순수함수 다른곳에 영향을 끼치지 않는 함수를 함수형 프로그래밍에서는 '순수 함수'라고 하는데요. 이는 조금 바꿔서 말하면 '같은 입력이 주어지면, 항상 같은 결과를 내는 함수'라고 생각할 수 있습니다. 이를 코드로 한번 살펴볼텐데요. 먼저 순수함수가 아닌 예를 먼저 살펴봅시다. class Something { private static int num = 1; p..

Java 2023.02.10

[Effective Java] 아이템 40 : @Override 애너테이션을 일관되게 사용하라

예제 코드는 여기서 보실 수 있습니다. 0. 들어가며 보통 IDE 에서 재정의 기능을 사용하면 자동으로 @Override 어노테이션을 붙여줍니다. 그래서 저는 @Override 에 대해 깊게 고민해본적이 없는데요. 이번 아이템은 개발도구가 도와주지 않다고 가정하고 자세히 알아보겠습니다. 1. @Override 를 붙이지 않는다면 @Override 어노테이션의 가장 중요한 역할은 해당 메서드가 정확하게 오버라이드하고 있는지 확인해주는 것 입니다. class Something { private final int num; public Something(int num) { ... } // equals, hashCode 는 문제없다고 가정 public boolean equals(Something obj) { ....

Java 2023.02.07

조금 늦은 2022년 회고 + 취업 후기

이번 글은 한해동안 일어난 일들과 느낀 감정들을 회고하는 글이기 때문에 평어체로 작성한다. 0. 나에게 2022년은 어떤 의미인가 2022년은 내 인생에서 가장 의미있는 시간 중 하나가 될 것 같다. 즐겁기도 했고, 힘들기도 했고, 짜증나기도 했고, 때때로 성취감도 느꼈다. 이 덕분에 2022년 1월의 나와 현재의 나를 비교해보면 기술적, 정신적으로 많이 성장했다고 느낀다. (유치원생이 초등학생이 되었는데 '나는 다 컸다'라고 생각하는것 일 수도 있지만 말이다..ㅋㅋ) 1. 코드스쿼드 2021년 12월 협업을 중요시 한다는 철학을 가진 교육기관을 찾아 헤맸다. 그러던 중 코드스쿼드와 인연이 되어 6개월간의 과정을 시작하게 됐다. 처음에는 그저 의욕이 앞서서 내 스스로에 대한 이해가 부족한 ..

회고 2023.01.30

[Effective Java] 아이템 33 : 타입 안전 이종 컨테이너를 고려하라(feat. ApplicationContext of Spring)

0. 들어가며 33번은 타입 안전 이종 컨테이너에 대한 이야기를 하는 아이템입니다. 이 단어를 하나 하나 분해하여 의미를 파악해보겠습니다. 타입 안전 : 제네릭을 이용하여 타입 안정성을 꾀함 이종(異種) : 다른 종류 컨테이너 : 무언가를 담는 개체(그릇, 용기, 화물 컨테이너 등) 이를 합쳐서 생각해보면 다음과 같습니다. 타입 안전 이종 컨테이너 : 제네릭을 이용하여 타입 안정을 꾀하지만, 여러 타입을 담을 수 있는 개체 의미를 알았으니 더 자세한 내용은 아래에서 알아보겠습니다. 1. 타입 안전 이종 컨테이너(비한정적 타입 토큰) 먼저 책에서 타입 이종 컨테이너를 설명하기위해 제시한 코드를 살펴봤습니다. public class Favorites { private Map 를 받는데요. 이를 책에서는 타입..

Java 2023.01.28

[MySQL] 복합 인덱스와 커버링 인덱스

MySQL 에서 복합 인덱스를 걸었을 때 실제로 인덱스를 타는건 어떤 상황에 탈까? 1. 테이블 & 인덱스 mysql> desc review; +----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+-------+ | id | bigint | NO | PRI | NULL | | | review_content | varchar(255) | YES | | NULL | | | seq | bigint | YES | MUL | NULL | | | store_id | bi..

데이터베이스 2023.01.26

[Effective Java] 아이템 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라

예제 코드는 여기서 보실 수 있습니다. 0. 들어가며 이번 아이템은 상속을 활용해야하는 이유에 대한 내용을 담고있습니다. 아래에서 천천히 알아보겠습니다. 1. 태그 달린 클래스 아이템의 제목에서도 그렇고, 책에서도 태그 달린 클래스 라는 말이 자주 등장하는데요. 그 의미가 궁금해졌습니다. 1.1 태그란? 저는 태그란 클래스를 더 세분화 시키기 위한 필드/상태라고 이해했습니다. 특정 클래스에 이런 상태를 붙여서 더 세분화된 것이 태그 달린 클래스인 것이죠. 제가 친구들에게 “얼음이 녹으면?” 이라는 질문을 합니다. 그러면 친구들은 다음과 같이 대답합니다. 문과 친구 : “얼음이 녹으면 봄이 온다는 거지” 이과 친구 : “물이 되지” 그러면 저는 친구라는 클래스에 질문을 했지만, 문과인지 이과인지에 따라 다..

Java 2023.01.10

[Effective Java] 아이템 17. 변경 가능성을 최소화하라

예제 코드는 여기서 보실 수 있습니다. 0. 들어가며 이번 아이템은 불변 클래스(Immutable Class) 에 대한 내용입니다. 클래스를 불변으로 만들기 위한 규칙과 장단점 등에 대해 알아볼 예정입니다. 1. 불변 클래스 불변 클래스란 말 그대로 내부의 값을 수정할 수 없는 클래스를 의미합니다. 생성된 시점에 상태가 확정되어, 소멸되기 전까지 달라지지 않습니다. 이렇게 불변 클래스로 만들면 설계, 구현, 사용이 쉬워지며 오류 발생 여지도 줄어들게 됩니다. 이 대표적인 예가 바로 java.util.Date 와 java.time.LocalDate 입니다. java.time 패키지 TMI(Joda time) Java 8 릴리즈 전까지 사용되던 Date 는 가변 클래스입니다. 이 때문에 위에서 말한 여러 문..

Java 2023.01.04

[Effective Java] 아이템 10. equals는 일반 규약을 지켜 재정의하라

예제 코드는 여기서 보실 수 있습니다. 0. 들어가며 equals 메서드는 두 개체가 같은지 확인하는데 사용됩니다. Java 에서 두 개체가 같은지 확인하는 기준은 동일성 과 동등성 두가지로 나누어집니다. 0.1 동일성 동일성 : 두 개 이상의 사상(事象)이나 사물이 서로 같은 성질. 동일성이란 두 개체가 완전히 같은지를 나타내는 성질입니다. 위 그림의 refVar2 와 refVar3 는 지역변수로서는 개별적으로 존재하지만, 같은 객체2를 가리킵니다. 즉, refVar2 == refVar3 이 성립하며 이는 두 변수 refVar2, refVar3 은 동일하다고 표현할 수 있습니다. 0.2 동등성 동등성 : 가치, 등급 따위가 서로 똑같음. 동등성이란 두 개체가 논리적으로 같은지를 나타내는 성질입니다. S..

Java 2022.12.28