Java 5

[ Java ] 불변객체

불변 객체 (Immutable Object) 가변 객체는 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태가 변경 가능한 객체이다.(ex ArrayList, HashMap, StringBuilder, StringBuffer ) 그 반대로, 불변 객체는 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태를 변경할 수 없는 객체이다. 불변 객체는 멀티 스레드 환경에서도 안전하게 사용할 수 있다는 신뢰성을 보장하며, 대표적인 불변 객체로 String 등이 존재한다. 이외에도 프로그래머가 커스텀 객체를 생성하여 내부 상태가 변경되지 않게 만들면, 그것도 불변 객체가 된다. 불변 객체 사용시 장점 1. 쓰레드에 안전하여 멀티 쓰레드 환경에서 동기화를 고려하지 않아도 된다. 2. 불변객체를 필드..

Java 2023.01.20

[ Jpa ] 연관관계

Jpa 공부하면서 정말 어려웠던 개념이 몇가지 있는데 그 중 하나가 연관관계 매핑이다. jdbcTemplate, mybatis를 사용한 경험이 있는 나는 fk를 이용해 테이블들의 연관된 정보를 가져오는 것에 익숙해져있었기 때문이다. 그러나 Jpa 연관관계를 익히기 위해선, 객체들 간의 관계와 테이블 간의 관계의 차이점을 잘 알아야 한다. 테이블과 객체의 차이 테이블은 외래키(fk)로 join을 사용하여 연관된 테이블을 찾는다. 객체는 참조를 사용하여 연관된 객체를 찾는다. 여기 예시를 보면 더 잘 이해가 될 것 이다. [ 객체 연관관계 ] 단방향이다. Member id Team team username ↓ Team id name [ 테이블 연관관계 ] member member_id (pk) team_id..

JPA 2023.01.06

[ Java ] 정적 팩토리 메서드 (Static factory method)

스프링 강의를 듣다가 강사님께서 생성자를 static of 를 사용해서 만드는 모습을 보고 관심이 생겨 찾아본 결과 정적 팩토리 메서드라는 것이 있었다. 나는 자바를 배울 때 생성자를 통해 객체 생성하는 방법을 배웠고 후에 따로 공부하며 빌더를 통한 객체 생성에 대해 알게 되었다. 그런데 정적 팩토리 메서드를 통해 생성하는 방법은 처음 봐서 신선하게 다가왔고, 굳이 static 메서드로 감싸서 생성자를 사용하는 이유가 궁금하여 공부해보았다. 먼저 정적 팩토리 메서드가 뭘까. public User(int userId, String name, String email) { this.userId = userId; this.name = name; this.email = email; } public static v..

Java 2022.12.22

[Java] Optional

스트림을 공부하며 Optional의 존재를 알게되었고, 최근에 스트림 없이 Optional을 활용하는 코드를 보고, Optional을 단독으로 활용할 수 있구나! 를 깨닫게 되어 공부해보았다. 자바 토이프로젝트를 할 때 일일이 if !=null을 사용하여 코드를 방어했었다. 이렇게 null 체크를 하게되면 코드가 지저분하고 길어지며 가독성이 매우 떨어진다. 이를 Optional을 사용하면 null체크를 직접 하지 않아도 되면서, 명시적으로 해당 변수가 null일 수도 있다는 가능성을 표현할 수 있다. Optional이란? Optional은 "존재할 수도 있지만 안 할 수도 있는 객체", 즉 "null이 될 수도 있는 객체"를 감싸고 있는 일종의 래퍼 클래스이다. Optional 객체 생성 Optional..

Java 2022.12.02

[Java] 함수형 인터페이스

Enum의 활용도를 공부하다 CALC_A(value -> value) 이런식으로 함수형 인터페이스가 사용될 수 있다는 사실을 알게었고, 함수형 인터페이스가 다양하게 활용될 수 있을 것 같은데 나는 기본적인 것도 잘 모르는 것 같아 이를 공부해야겠다는 생각이 들었다. 함수형 인터페이스란? 추상메서드 단 하나만 존재하는 인터페이스를 함수형 인터페이스라고 한다. @FunctionalInterface interface MyFunction{ public abstract int max(int a, int b); //public abstract 는 생략가능 } 이렇게 직접 만들 수 있으며 @FunctionalInterface 어노테이션이 필수적인건 아니지만, 이것을 붙여주면 추상메서드가 두 개 이상 들어가는 것 등의..

Java 2022.12.02