자바 8

내가 느낀 객체지향 프로그래밍에 대해서 (의존성을 중심으로)

객체 지향 프로그래밍은 현실의 중요한 문제를 해결 하기 위한 과정을 배치는 방법이다. 반대로, 절차 지향은 문제 해결 과정을 서술한다. 순서대로 나열된다는 뜻이다. 왜 보통 사람들에게 익숙한 문제를 서술하는 방법을 사용하지 않는 방법이 등장 했을까? 순차적으로 작성하는 방법은 마치 자전거 체인 처럼 부속품 사이에 커다란 의존성이 생긴다. 의존성이 여럿이면 문제를 해결하기 어렵게 한다. 하나의 문제가 아니라 여러개의 문제를 해결해야 하기 때문이다. 반면, 배치 하는 방식을 사용하면 의존이 생기지 않는다. 순차적인 방식보다 문제의 범위를 더 좁힐 수 있다고 생각한다.

자바 2024.04.06

저는 이런 코드가 읽기 힘들더라구..요 ㅜㅠ

가변 변수 사용하기 let, var 처럼 가변 변수는 쓰지 말아주세요... 코드가 어떤 흐름으로 전개되는지 이해하기 어렵습니다 Else문 쓰기 Else문은 코드의 맥락을 이해하기 어렵게 합니다. 최대한 자제 하는것을 추천 합니다! 코드에 들여쓰기 여러번 하기 들여쓰기는 최대 한번만 나오게 해주세요. 이중 삼중으로 겹친 코드는 읽기 어렵습니다.. 람다 줄여쓰기 v.types.map((t) => t.option.name) i.values[i.names.indexOf(t.option.name)] === t.variation.value v, t, i 변수가 무엇인지 아시겠나요??! 최대한 있는 그대로 써주세요! 주석 엄청 많이 달기 주석에 왜 이 코드를 적었는지만 써주세요 ㅜ... 슈퍼 클래스 클래스는 하나의 ..

자바 2023.07.07

HashMap vs ConcurrentHashMap vs HashTable in Java

들어가며 자바에서 key value 형태로 저장되는 대표적인 자료구조인 HashMap, HashTable, ConcurrentHashMap에 대해서 설명해보려 한다. HashMap vs HashTable HashMap과 ConcurrentHashMap은 공통적으로 Entry라는 개념을 가지고 있다. Entry는 key value 한 쌍을 의미하며, 하나의 Entry는 여러개의 Entry를 가지고 있다. Bucket은 Entry를 하나 또는 여러개를 가진 HashMap의 구성 요소이다. HashMap을 초기화 시킬 때, initialCapacity 파라미터를 통하여 Bucket의 크기를 정해줄 수 있다. 만약 initialCapacity 보다 많은 버킷을 HashMap에 넣게 된다면 리사이징 과정이 일어나..

자바 2023.06.26

그로잉맘 검사에 디자인 패턴 적용하기

글을 읽기 전에 한번 봐주세요! - 주니어 개발자라 미숙한점이 있을 수 있습니다. - 피드백 환영합니다. 다만 디엠으로 해주시면 감사하겠습니다. 상처받아요 개요 저는 그로잉맘에서 백엔드 개발자로 일하고 있는 김영석이라고 합니다. 그로잉맘에서는 육아를 하시는 부모님들을 위해 각종 검사를 제공하고 있습니다. - 아이의 발달 수준을 알 수 있는 발달검사 - 아이의 언어 발달 수준을 알 수 있는 언어 발달검사 - 아이의 기질을 알 수 있는 아이 기질검사 해당 검사들은 두가지 과정을 통해 진행 됩니다 1. 아래 이미지와 같이 아이에 대한 설문을 하면! 2. 그로잉맘의 전문 상담사 분들이 직접 작성하신 육아 관련된 글(멘트)들을 추천 해주게 됩니다! 문제점 제가 만든 기존 검사 멘트 추출 로직의 문제점은 아래 두가..

자바 2022.09.07

절차지향 VS 객체지향 by Kotlin

절차지향 객체지향 차이점 - 객체의 유무 - 절차지향은 데이터 중심적 개발, 객체지향은 기능 중심적 개발 - 객체지향적으로 개발한다면, 객치지향으로 작성한 프로그램이 일반적으로 읽기가 더 편하다 - 객체지향적으로 개발을 하게 되면 유지보수를 할 때 어느 코드를 수정 해야할지 찾기가 비교적 쉬움 절차지향 예시 (고객이 자판기를 이용하는 프로그램) package proceduralvsoop var orangeJuice = 10 var appleJuice = 20 fun main() { var customerChanges = 1000 var customerHas: String? = null val wantJuice = "Orange juice" if (wantJuice == "Orange juice") { i..

자바 2022.08.29

책 단위테스트 느낀점 1편

사내에서 새로운 프로젝트를 시작하게 됐다. 이 프로젝트에서 단위 테스트를 도입 했는데, 어떻게 하면 단위 테스트를 잘 할 수 있을지에 대한 궁금증이 있었다. 단위테스트라는 책을 통해 이 궁금증이 해결되고 더 나은 단위테스트 코드를 작성할 수 있으면 좋겠다. 단위테스트 책을 요약할 때, 내가 느꼈던점 위주로 요약을 해보려고 한다. 필요하면 예제 코드도 함께 작성 해보려 한다. 느낀점 단위테스트란 작은 코드 조각 (단위)를 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트다. 왜 작은 코드 조각일까? 내 생각으로는 오류를 빠르게 찾을 수 있고, 테스트 코드의 가독성이 높아지기 때문이라고 생각한다. 만약 양이 많은 코드를 검증한다고 생각하면 해당 테스트를 실행시킬때, 양이 많은 코드 중 ..

자바 2022.08.25

Kotlin Junit5 @ParameterizedTest

제가 토이 프로젝트를 진행할 때, 관리자가 호텔 이름을 통해 호텔을 조회할 수 있는 기능에 대한 테스트가 필요했습니다. 테스트에 들어가는 인풋값에 여러가지 데이터가 필요하게 되었는데 이유는 무작위로 검색한 이름마다 해당 이름에 맞는 호텔 정보가 잘 나오는지 확인하기 위함입니다. 그래서 사용한게 @ParameterizedTest 였습니다. 해당 어노테이션을 사용하면 하나의 테스트에서 여러개의 파라미터에 대한 결과 값을 검증할 수 있습니다. 즉 여러가지 호텔 이름으로 검색한 결과값을 검증할 수 있다는 뜻입니다. 아래 이미지와 같이 저는 호텔 이름 세개에 대한 결과값이 잘 검증되는지 확인 해보았습니다.

자바 2022.08.20

JPA Entity에 기본 생성자가 필요한 이유

entity 클래스를 선언할때 습관적으로 @NoArgsConstructor 어노테이션을 명시한다. 이유는 해당 클래스가 Lazy loading에 의해 프록시 객체가 될 필요가 있는 경우, Java Reflection API를 사용해서 객체를 생성해야 하기 때문이다. 그런데 Java Reflection API는 생성자의 인자를 받아와서 객체를 생성할 수 없기 때문에 기본 생성자가 필요하게 된다. 또한 일반적으로 기본 생성자의 접근 제어자를 protected로 놓는 경우가 있는데 이는 개발자 본인, 또는 다른 개발자가 해당 엔티티의 스펙에 맞지 않게 객체를 생성할 우려가 있기 때문이 이를 방지하기 위해서다.

자바 2022.01.30