반응형 전체 글346 람다 표현식이란? 람다란 표현식이란? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 람다의 특징은 아래와 같다. 익명 : 보통의 메서드들과 달리 이름이 없으므로 익명이라 표현한다. 함수 : 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 하지만 메서드처럼 파라미터 리스트, 바디, 반환 형식, 가능한 예외 리스트를 포함한다. 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다는 파라미터, 화살표, 바디로 이루어진다. (Apple a1, Apple a2) -> a1.get.. 개발/Java 2022. 3. 8. JPQL 기본 문법 2023. 02.07 17:40 복습 및 정리 시작 JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원한다. 우리는 이제 그중에서도 제일 중요하고 기본이 되는 JPQL에 대해서 알아보겠다. JPQL JPQL은 객체지향 쿼리 언어다. JPA를 사용하는 사람들은 필수로 JPQL을 학습해야 한다. 우리가 JPA를 개발하다 보면 em.find()메소드로는 복잡한 검색 쿼리를 데이터베이스에 보낼 수 없다. 따라서 애플리케이션이 필요한 데이터만 데이터베이스에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. 또한 우리는 ORM을 사용해 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하다. 즉 .. 개발/JPA 2022. 3. 7. 2022.03.06 클린 코드 - 단위 테스트 TIL (Today I LeTIL (Today I Learned) 2022.03.06 오늘 읽은 범위 9장. 단위 테스트 책에서 기억하고 싶은 내용을 써보세요. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트다. (p.157) 테스트 코드는 실제 코드 못지 않게 중요하다. (p.157) 테스트 코드에서 제일 중요한 것은 가독성이다. (p.158) 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요 사실 요즘 제일 궁금하고 배워야한다고 느끼는 것이 바로 이 테스트 코드다. 클린 코드에서도 테스트 코드에 관해서는 책 한 권으로도 부족할 정도로 많은 얘기를 할 수 있다고 한다. 이 책에서는 테스트 코드에 할당된 부분이 너무 적은 것 같다. 사실 이부분에서는 저번 장들만큼 정보와 깨.. 독서/클린코드 2022. 3. 6. 제네릭 (Generics) 제네릭이란? 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형 변환의 번거로움이 줄어든다. 즉 장점은, 타입 안정성을 제공 타입 체크와 형 변환을 생략할 수 있으므로 코드가 간결해짐 제네릭은 클래스와 메서드에 선언할 수 있는데, 먼저 클래스에 선언하는 제네릭 타입에 대해 알아보자. 먼저 아래와 같은 Box 클래스 코드가 있다. class Box{ Object item; void setItem(Object item) { this.item = item; } Object getItem(){ return item; } } 위 코드를 아래와 같이 수정할 수 있다. 클래스를 제네릭 클래.. 개발/Java 2022. 3. 6. 값 타임 2023. 02.07 17:00 복습 및 정리 시작 JPA는 데이터 타입을 크게 두 분류로 나눌 수 있다. 엔티티 타입 @Entity로 정의하는 객체다. 데이터가 변해도 식별자로 지속해서 추적이 가능하다. 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능하다. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체다. 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체된다. 값 타입은 또 크게 3가지로 나눌 수 있다. 기본 값 타입 : 자바 기본 타입, 래퍼 클래스, String 임베디드 타입 : 복합 값 타입 컬렉션 값 타입 이제 차근 차근 알아보겠다. 우선 아래 예제 코드를 살펴보자. @Entity public class Member{ @Id.. 개발/JPA 2022. 3. 3. 2022.03.03 클린 코드 - 오류 처리 TIL (Today I LeTIL (Today I Learned) 2022.03.03 오늘 읽은 범위 7장. 오류처리 책에서 기억하고 싶은 내용을 써보세요. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다. (p.132) 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 그러면 자연스럽게 try 블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션 본질을 유지하기 쉬워진다. (p.133) 오류 메시지에 정보를 담아 예외와 함께 던진다. (p.135) 오류는 많고 분류하는 방법도 다양하다. 그러나 애플리케이션에서 오류를 정의할 때 프로그래머에게 가장 중요한 관심사는 오류를 잡아내는 방법이다. .. 독서/클린코드 2022. 3. 3. 영속성 전이, 고아 객체 2023. 02.07 16:30 복습 시작 이번 시간에는 영속성 전이와 고아 객체에 대해 학습해보겠다. 영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이 기능을 사용해야 한다. JPA는 CASCADE 옵션으로 영속성 전이를 제공한다. 쉽게 말해서 영속성 전이를 사용하면 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다. 예를 들어 일대다 단방향 부모와 자식 연관 관계가 있다고 생각해보자. 코드는 아래와 같다. (부모 : 자식, 1 : N) @Entity public class Parent{ @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "parent") pri.. 개발/JPA 2022. 3. 2. 프록시, 즉시 로딩과 지연 로딩 2023. 02.07 15:40 복습 시작 이번에는 프록시와 즉시 로딩, 지연 로딩에 대해 알아보겠다. 객체는 객체 그래프로 연관된 객체들을 탐색한다. 그런데 객체가 DB에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA 구현체들은 이 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시를 사용하면 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원한다. 한 가지 예시를 들어보자. 다대일 단방향 관계인 멤버와 팀이 있다. 즉 멤버는 팀을 참조하는 참조 변수가 있고, 팀은 멤버를.. 개발/JPA 2022. 3. 2. 고급 매핑 2023. 02.07 15:00 복습 시작 고급 매핑 이번에는 상속 관계 매핑과 @MappedSuperclass에 대해 알아보겠다. 상속 관계 매핑 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼 타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은, 객체의 상속 구조와 데이터베이스의 슈퍼 타입 서브타입 관계를 매핑하는 것이다. 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단인 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 이제 주요 어노테이션들을 살펴보고 각 전략들을 .. 개발/JPA 2022. 3. 1. 2022.03.01 클린 코드 - 객체와 자료 구조 TIL (Today I LeTIL (Today I Learned) 2022.03.01 오늘 읽은 범위 6장. 객체와 자료구조 책에서 기억하고 싶은 내용을 써보세요. 구현을 감추려면 추상화가 필요하다. (p.119) 그저 조회 함수(Getter)와 설정 함수(Setteer)로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다. (p.119) 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. (p.119) 자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. (p.119) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드.. 독서/클린코드 2022. 3. 1. String, StringBuilder, StringBuffer String 클래스에는 문자열을 저장하기 위해서 문자열 배열 참조 변수를 인스턴스 변수로 정의해놓고 있다. 인스턴스 생성 시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스 변수에 문자형 배열에 저장되는 것이다. String VS StringBuilder, StringBuffer 차이 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 읽고, 변경할 수는 없다. 불변이다. (immutable) StringBuilfer, StringBuffer는 각각의 인스턴스에 저장된 문자열 변경이 가능하다. 가변적이다. (mutable) 즉 아래와 같이 '+'연산자를 이용해서 문자열을 결합하는 경우 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열 "ab"이 담긴 String 인스턴스가 생성되는 것이다... 개발/Java 2022. 3. 1. 2022.02.28 클린 코드 - 5장 형식 맞추기 TIL (Today I LeTIL (Today I Learned) 2022.02.28 오늘 읽은 범위 5장. 형식 맞추기 책에서 기억하고 싶은 내용을 써보세요. 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. (p.96) 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. (p.96) 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저 차원 함수와 세부 내역이 나온다. (p.98) 종속 함수. 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호.. 독서/클린코드 2022. 3. 1. 이전 1 ··· 18 19 20 21 22 23 24 ··· 29 다음 반응형