본문 바로가기

TIL

(56)
2022/02/07 TIL The Red : STREAM Predicate 하나의 값을 입력받아 참과 거짓을 판단한다. 3개의 default 메소드와 2개의 static 메소드가 존재한다. (default 메소드 까지만 학습한다) [공식문서] @FunctionalInterface public interface Predicate { boolean test(T t); default Predicate and(Predicate
2022/02/06 TIL 인프런 JPA 기본편 값 타입 컬렉션 값 타입은 식별자가 없기 때문에 생명주기를 엔티티를 의존한다. 하지만 이렇게 되면 값을 수정할 때마다 존재하는 값을 전부 지우고 수정하는 데이터를 새로 만들게 돼서 성능이 떨어진다. 따라서 OneToMany로 사용하는 것이 좋고(값 타입을 엔티티로 승격), 만약 값 타입으로 사용해야 한다면 불변 객체로 사용하는 것이 좋다. 값 타입 만드는 법 @ElementCollection @ColloectionTable(name = "ADDRESS", joinColumns = @JoinColumn(name = "MEMBER_ID")) private List addressHistory = new ArrayList();
2022/02/05 TIL Thd Red : STREAM Supplier 인자는 받을 수 없고 값을 리턴하기만 한다. 공식문서 @FunctionalInterface public interface Supplier { T get(); }예제 1) @Test void test_supplier(){ Supplier mySupplier = () -> "hello supplier"; assertThat(mySupplier.get()).isEqualTo("hello supplier"); }mySupplier는 get()이라는 하나의 메서드만 가지고 있기 때문에 () -> "hello supplier"; 를 할당하면 get()에 할당이 되게 된다. 예제 2) @Test void test_supplier_with_method(){ Supplier..
2022/02/04 TIL (JAVA8) The RED : JAVA STREAM 2장, 3장 함수는 동사로, 객체는 명사로 이름을 짓는다. OOP를 하다 보면 명사로만 추상화를 하게 되는데 동사로 추상화하는 게 좋은 경우가 있다. 명령형 프로그래밍과 선언형 프로그래밍의 일처리는 다르다. 함수형 프로그래밍이 언제 필요한지 몰랐었는데 동사를 추상화할 떄 필요하단 것을 알게 되었다. 1급 시민의 조건 함수/메서드의 매개변수로 전달할 수 있는가 함수/메서드의 반환 값이 될 수 있는가 변수에 담을 수 있는가 객체는 1급 시민의 조건을 갖추고 있으므로 함수를 객체처럼 만든다면 1급 시민이 될 수 있다. JAVA8에서 함수형 프로그래밍을 지원하는 방법이기도 하다. Funcational Interface 어노테이션이다. 추상메서드를 1개 가지고 있어야 한다...
2022/02/03 TIL JPA 프로그밍 기본 편 : 값 타입과 불변 객체 임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 side effect가 발생할 수 있다. 두 개의 엔티티에서 동일한 값 타입을 참조하게 되면, 하나의 엔티티에 해당하는 값 객체 값을 변경하면 나머지 하나의 객체에 영향을 미치게 된다. Address address = new Address("city", "address", "1000"); Member merber1 = new Memeber("name1", address); Member merber2 = new Memeber("name2", address); member1.getAddress().setCity("city1"); // member2의 city값도 같이 변경된다. 그 이유는 당연하게도 자바..
2022/02/02 TIL 클린 아키텍처 6장 : 함수형 프로그래밍 현명한 아키텍트라면 가능한 한 많은 처리를 불변 컴포넌트로 옮겨야 하고, 가변 컴포넌트에서는 가능한 한 많은 코드를 빼냐야 한다. 함수형 프로그래밍은 변후 할당에 부과되는 규율이다. 결국 함수형프로그래밍의 주요 관심사는 변수 할당이다. 1964년 앨런 튜링이 사용한 소프트웨어 규칙과 지금의 소프트웨어 규칙은 조금도 다르지않다. 순차, 분기, 반복, 참조로 구성된다. 그 이상도 이하도 아니다. IT산업이 급협하게 발전한것 같지만 우리가 작성하는 코드에 급격한 변화는 없다는 것이 흥미롭다. Thd Red : TDD 코드를 작성하는것 만큼 작업을 설계하는 것도 중요하다. 체크리스트, 사용자 스토리, 테스트 케이스는 명확한 이정표를 제공해준다. 결국 TDD를 잘하고 싶으..
2022/02/01 TIL 클린 아키텍처 5장 : 객체 지향 프로그래밍 OO란 다형성을 이용하여 전체 시스템의 모든 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력 OO의 특징을 크게 캡슐화, 상속, 다형성이라고 한다. 하지만 캡슐화와 상속은 객체 지향적으로 프로그래밍 하는데에 아키텍트 관점에서 큰 변화를 가져오지 못한다. 다형성의 힘은 의존성 역전을 통해 배포 독립성, 개발 독립성을 갖는 다는 것이다.
2022/01/31 TIL 클린 아키텍처 3장 : 패러다임 개요 각 패러다임(구조적, 객체지향, 함수형 프로그래밍)은 프로그래머에게 권한을 박탈한다. 어떠한 프로그래밍 방법을 사용한다고 하면 개발자에게 가져다 줄 이득을 생각하지만 어떤 것을 제한하는지를 생각해보게 되었다. 클린 아키텍처 4장 : 구조적 프로그래밍 다익스트라는 증명이라는 수학적 증명을 이용해 프로그래밍을 발전시키고자 했다. 이 증명을 할 때 goto문이 방해된다는 것을 알게 되었다. 뵘과 야코피니는 순차, 분기, 반복 세 가지 구조만으로 표현할 수 있다는 사실을 증명했다. 순차, 분기, 반복이라는 프로그래밍의 기초가 어떻게 발견되고 사용되어왔는지 알게 되었다. 수학은 증명 가능한 서술이 참임을 입증하는 원리 과학은 증명 가능한 서술이 거짓임을 입증하는 원리 테스트를..
2022/01/30 TIL 클린아키텍처 1장 : 설계와 아키텍처란? 빨리 가는 유일한 방법은 제대로 가는 것이다. TDD를 했을때가 안 했을 때보다 빠르다는 연구 결과가 있다. 클린아키텍처 2장 : 두 가지 가치에 대한 이야기 소프트웨어는 부드러운 제품이라는 뜻이다. 우리가 만드는 것이 하드웨어가 아니라 소프트웨어임을 항상 자각해야 한다. 변경이 용이한 코드를 작성해야 한다. 긴급하지만 중요하지 않은 일은 하게 된다. 우리는 이를 해결하기 위해 투쟁해야 한다. 종종 개발자와 관리자는 우선순위를 잘못 정하는 경우가 있다. 이를 개발자가 인지한다면 적극적으로 의견을 내야 한다. 이게 개발자(아키텍트)가 고용된 이유이기도 하다.
2022/01/29 TIL 클린코드 17장 : 냄새와 휴리스틱 플래그 인수는 피해야 한다. 인수로 boolean을 던지기 전에 조건문을 추가해야 한다. 조건문(if, switch) 대신 다형성을 사용하라 요즘 실무에서 코드를 작성할 때 적극적으로 리팩토링 하고 싶은 부분이다. 매직 숫자는 명명된 숫자로 교체하라 코드숨에서 종립님에게 코드 리뷰받았던 기억이 있는 부분이다. 매직 숫자는 상수로 빼는 것을 1차적으로 고려해야 한다. (대부분의 경우 상수가 맞다.) 상수는 상속하지 않는다. 실무에서 상수를 상속받는 코드를 분석할 때 힘들었던 기억이 있다. 이 책에서 확실하게 안 좋다고 강조해서 좋았습니다.