백엔드52 [이펙티브 자바] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 ✍️ 학습 목표 의존 객체 주입 패턴 📌 의존 객체 주입 패턴 일반적으로 객체는 여러 자원들과 의존한다. 예를 들어, 자동차라는 객체는 부품들에 의존하고 책의 예시는 맞춤법 검사기는 사전에 의존한다. 의존한다는 말은 관계를 가진다, 즉 서로가 서로에게 영향을 주는 것을 말한다. 🤔 왜 필요하지? 책에서 제시된 예시들을 보면 금방 이해할 수 있다. 1️⃣ 정적 클래스를 사용 public class SpellChecker { private static final Dictionary dictionary = new Dictionary(); private SpellChecker() { } public static boolean isValid(String word) { return false; }; public s.. 2023. 1. 15. [Java] Reflection 🎇 Java Java를 사용하다 보면 리플렉션(Reflection)이라는 용어를 자주 접한다. 대충 무엇인지는 알겠는데 설명해 주세요! 하면 못 할 것 같아서 정리해 본다😋😋 🪞 리플렉션, Reflection 리플렉션이란? 단어의 의미를 떠올려서, 거울에 반사된 어떤 대상을 제약 없이 사용하는 기술이다. 자세하게 설명하면, 힙 영역에 로드된 Class 타입의 객체를 통해서 인스턴스를 생성하고, 접근 지정자의 제약 없이 인스턴스의 메소드와 필드를 사용할 수 있게 하는 Java API이다. 😮 힙 영역에서 Class 타입 가져오기 힙 영역에 로드된 Class 타입은 다음 3가지 방법으로 가져올 수 있다. 클래스.class 인스턴스.getClass() Class.forName(클래스명) public class.. 2023. 1. 11. [이펙티브 자바] 아이템 3 : private 생성자나 열거 타입으로 싱글턴임을 보증하라 ✍️ 학습 목표 싱글턴 이해하기 싱글턴 vs 정적 클래스 📌 싱글턴 이해하기 싱글턴이란, 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 🛠️ 싱글턴 만들기 1️⃣ private static final 필드 방식 class Pokemon { public static final Pokemon INSTANCE = new Pokemon(); private Pokemon() { } } 싱글턴임을 확실하게 알 수 있고 간결하다. 하지만 리플랙션 API를 사용해서 private 생성자에 접근하면 제 2의 인스턴스가 만들어질 수도 있다. 추가적인 인스턴스가 생성되려고 할 때 예외를 던지는 방식으로 이런 공격을 방어할 수 있다. 2️⃣ 정적 팩토리 메서드 방식 class Pokemon { private sta.. 2022. 12. 21. [이펙티브 자바] 아이템 2 : 생성자에 매개변수가 많다면 빌더를 고려하라 ✍️ 학습 목표 객체 생성하기 (feat. 생성자) 각각의 장단점 이해하기 📌 객체 생성하기 (feat. 생성자) 생성자를 사용해서 객체를 사용하는 방법은 3가지가 존재한다. 각 방식의 사용법들은 다음과 같다. 1️⃣ 점층적 생성자 매개변수가 다른 생성자를 여러 개 구현하는 방식이다. 필수 매개변수가 들어가는 생성자부터 선택 매개변수를 하나하나 추가되는 생성자를 점층적으로 구현하는 방식이다. class Pokemon { private final int attack, defense, hp; public Pokemon(int attack) { this(attack, 0, 0); } public Pokemon(int attack, int defense) { this(attack, defense, 0); } p.. 2022. 12. 21. TIL : Random VS SecureRandom (19) 🛠️ Random과 SecureRandom 난수 생성을 위해서 보통 Random을 사용하는데, SecureRandom을 권장하더라! 왜 그럴까? 🤔 Random 우선 Random은 난수를 만들기 위해 사용하는데, 정말 무작위 숫자를 만들지 않고 의사 난수를 생성한다. 의사 난수란? 무작위의 숫자처럼 보이는 규칙적으로 만들어진 숫자이다. Random을 조금 써본 사람이라면 같은 seed라면 같은 값이 나오는 것을 알고 있을 것이다! 이게 바로 의사 난수라서 그렇다. 😮 SecureRandom 이름에서부터 느껴지듯이 보안성이 더 좋을 것만 같다. 그렇다면 정확하게 어떤 점이 다를까? 1️⃣ 크기 Random은 48 비트까지 지원하지만 SecureRandom은 128 비트까지 지원한다! 같은 값이 나올 확률이.. 2022. 12. 20. [자바 ORM 표준 JPA 프로그래밍] 고급 매핑 (7장) 📌 상속 관계 매핑 관계형 데이터베이스에는 상속이 없다. 그나마 '슈퍼타입-서브타입 관계' 모델링 기법이 상속과 비슷하다. 즉, ORM에서의 상속 관계 매핑은 이 모델링 기법이고 3가지 방법으로 구현할 수 있다. 조인 전략 : 각각을 모두 테이블로 만들고 조회 시 조인을 사용한다. 단일 테이블 전략 : 테이블을 하나만 사용해 통합한다. 구현 클래스 테이블 전략 : 서브 타입마다 하나의 테이블을 만든다. 1️⃣ 조인 전략 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아 기본 키 + 외래 키로 사용한다. 테이블은 타입의 개념이 없어 타입을 구분하는 칼럼을 추가해야 한다. @Entity @Inheritance(strategy = InheritanceType.JOINED) // 상속의 부모 클.. 2022. 12. 12. 이전 1 2 3 4 5 6 7 8 9 다음