분류 전체보기411 [이펙티브 자바] 아이템 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. TIL : @PathVariable vs @RequestParam (20) 🌞 Spring Spring에서 URI로 전달되는 값을 받아오는 방법이 두 가지 존재한다. id가 1인 게시글을 가져올 때 다음과 같이 표현할 수 있다. GET http://xxx.xxx.xxx/api/post?id=1 // query parameter GET http://xxx.xxx.xxx/api/post/1 // path variable 딱 보면 다른데 자세하게 어떤 차이가 있는지 알아보자! 🌀RequestParam GET http://xxx.xxx.xxx/api/post?id=1 이렇게 URI에 쿼리가 들어가는 방식일 때 사용하는 어노테이션이다. 일반적으로 Http GET Method에서 많이 사용한다. 조금 더 자세하게 들어가면 다음 4가지 경우로 많이 사용한다. 1️⃣ Searching @Ge.. 2023. 1. 10. [이펙티브 자바] 아이템 4 : 인스턴스화를 막으려거든 private 생성자를 사용하라 ✍️ 학습 목표 정적 클래스 인스턴스화 방지 📌 정적 클래스 정적 메서드와 정적 필드만 담은 클래스를 정적 클래스라고 한다. 객체 지향성을 살리지 못하는 방법이지만 나름 쓰임새가 존재한다. 🤔 정적 클래스의 쓰임새 대표적인 쓰임새로는 java.lang.Math, java.util.Arrays 그리고 java.util.Collections 등이 있다. 또, final 클래스와 관련된 메서드들을 모아놓기도 한다. 모두 특정 기능을 모아둔 도구 꾸러미 같은 느낌이다. 그래서 유틸리티 클래스라고도 하나보다. 📌 인스턴스화 방지 애초에 유틸리티 클래스는 인스턴스로 만들어 쓰라고 설계한 게 아니다. 따라서, private 생성자를 선언해서 인스턴스화를 방지해야 한다. 🧐 왜 private 생성자? private 지.. 2023. 1. 2. [이펙티브 자바] 아이템 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. 이전 1 ··· 14 15 16 17 18 19 20 ··· 69 다음