Java

    [Effective Java] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라

    아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라. 생성자에 매개변수가 많을 때, 사용하는 점층적 생성자 패턴의 객체가 완전히 생성되기 전까지는 일관성이 무너진 상태에 놓이게 되는 단점과, 자바 빈즈 패턴의 클래스를 불변으로 만들수 없거나 하는 단점을 완화하고자 Builder를 사용한다. Builder는 점층적 생성자 패턴의 안전성와 자바빈즈의 가독성을 겸비하였다. Builder를 사용한다면, Client는 필수 매개변수 "만"으로 생성자를 호출해 빌더 객체를 얻고, 빌더가 제공하는 세터를 이용하여 원하는 선택 매개변수들을 설정할 수 있다. public class NutritionFacts { private final int servingSize; private final int servings; ..

    [Effective Java] 아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라

    아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라. 클라이언트가 인스턴스를 얻는 수단으로는 public 생성자도 있지만, 정적 팩토리 메서드를 통해 제공할 수 있다. 그렇다면, 정적 팩토리 메서드를 사용했을 때의 장점은 무엇이 있을까? 🤔 정적 팩토리 메서드를 사용한다면? 이름을 가질 수 있다. 이는 가독성과 관련되었다고 생각한다. 예시로 biginteger.probableprime을 통해 소수인 정수를 리턴한다는 의미가 확 눈에 들어오는 것을 알 수 있다. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. ex. Boolean.valueOf(boolean)은 객체를 아예 생성하지 않는다. 반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩토리 방식의 클래스는 언제, 어느 인스턴스를 살아있게 ..

    객체지향 5원칙, SOLID

    우아한 테크코스에서 @손너잘이 객체지향 5원칙에 대한 스터디를 열어주셔서, 뭣도 모르지만 일단 참여를 눌렀다. (난 항상 뭣도 몰라도 참여를 누른다...). 그래서 우선은 SOLID에 대해서 찾아본 내용들을 적어보려고 한다! 이론을 먼저 작성한 뒤, 내 경험(짧지만)에 빗대어 어떤 이슈가 있었는지?에 대해서도 아이디어를 적어볼까 생각한다 😋시작에 앞서..SOLID는 좋은 객체 지향 설계를 위한 5가지 원칙이라고 흔히들 말한다. 객체 지향은 무엇이고 또 좋은 객체 지향 설계는 무엇일까? 객체지향이란 핵심 의존성들을 역전시킴으로써 경직된 코드나 취약한 코드 및 재사용 불가능 코드가 되지 않게 하는 식으로 의존체들을 관리하는 일이며, 이를 위해 프로그램을 어떻게 설계해야하는지에 대한 개념이자 방법론이다. 이 ..

    자주 쓰이는 AssertJ 메서드

    TDD를 처음 하면서, AssertJ를 사용하게 되었는데 쓰면서 자주 쓰이는 부분들을 남겨놓으려 한다. (맨날 검색하기 때문..ㅎ) assertThat assertThat은 함께 사용할 수 있는 유용한 메서드가 몇가지 된다. 필요에 따라서 사용하면 될 듯 ! assertThat(3).isBetween(2,5); assertThat(actual).isEqualTo(expected); assertThat(3).isGreaterThan(1); assertThat(3).isGreaterThanOrEqualTo()assertEqauls assertEquals(actual, expected); // `actual`은 `expected`와 같나요?assertTrue, assertFalse assertTrue(x); ..

    Interact with Google Sheet API from JAVA (2)

    Google Sheets 인증 및 Maven Dependency는 Interact with Google Sheet API from JAVA (1)을 참고해주세요! 우선, 내가 Google Sheets를 이용해서 자동화할 작업은 write,insert,update 총 3가지이다. (자동적으로 삭제하는 것, 선택해 결과를 취하는 것은 기능에 포함되지 않았기 때문이다.) 여기서 용어가 헷갈릴 수 있는데, write는 행을 새로 삽입하지 않고 작성하는 것을 의미한다. 즉, 다음과 같이 A열 1행과 B열 2행에 내용이 작성되어있을 때, 안녕이라는 데이터로 A열에 write를 실행한다면 2행에 단순히 작성된다. write 실행 전 A B 1 테스트입니다. 2 테스트입니다. write 실행 후 (2행에 작성되었다.)..

    Interact with Google Sheet API from JAVA (1)

    시트 자동화를 해야하는 상황에 처했다. 🥲 TODO 👊 1. MySQL DB에 쿼리를 날려 결과를 조회한다. 2. 받아온 결과를 적절하게 Google Spreadsheet에 자동으로 입력한다. 3. 이때, 결과는 실행 시점 기준 오늘, 어제의 데이터만을 입력하며, 이미 존재하는 경우 수정한다. CHOOSE 우선 언어는 Java를 선택했다. 이유는 딱히 없고.. 회사에서 프레임워크로 대부분 Spring boot를 사용했기 때문이다. Sheet API는 공식 문서를 참고하고, 구글링과 스택오버플로우에 의존했다.. 이 글을 쓰는 이유도 자료가 너무 없었기 때문 + 삽질을 너무 많이 해서 혹시라도 이 글을 보신 분께서 더 좋은 솔루션을 주실 까 하는 맘에 😅 참고 자료 - https://www.baeldung...