JAVA 5

[이펙티브 자바] 객체 생성과 파괴

객체는 언제 어떻게 생성해야할까? 객체의 불필요한 생성을 피해서 효율적인 코드를 작성하는 방법을 알아보자  item 01. 생성자(new) 대신 정적(static) 팩터리 메서드장점팩터리 메서드는 메서드의 "이름" 을 지을 수 있음으로, 객체의 특성 묘사가 가능어떤 때에 이런 장점이 유용한가?하나의 시그니처는 하나의 생성자만 가질 수 있다. 시그니처의 순서가 개수가 다를 때 매번 새로운 생성자를 통해 객체를 생성해야 한다. -> 생성자는 이름이 없기 때문에 이럴 경우 각각의 다른 시그니처로 생성하는 객체가 어떤 객체인지 명확하게 파악하기 힘들다.이 때, 팩터리 메서드로 이름을 명명하고, 팩터리 메서드를 통해 객체를 생성하면 해당 객체가 어떤 역할인지 파악하기 쉽다.호출 시마다 인스턴스 새로 생성 안 됨자..

JAVA 2024.07.13

싱글톤 패턴과 프록시 패턴

디자인 패턴프로그래밍 시 자주 발생하는 문제를 해결하기 위한 최적의 방법 싱글톤 패턴클래스의 인스턴스를 하나만 생성해서 사용하기 위한 패턴전역 접근 지점을 제공When단 하나의 인스턴스만 필요한 경우공유 자원(데이터베이스 연결 등)에 대한 일관된 접근이 필요한 경우시스템 설정, 환경 설정과 같은 시스템 전반에 걸쳐 하나만 존재해야 하는 구성 요소을 적용해야 하는 경우Why & Benefit자원의 효율적 관리 : 중복 생성 방지해서 메모리 사용 최적화일관된 접근 제어 : 전역 인스턴스를 통해 일관되게 하나의 인스턴스에 접근데이터 공유 : 하나의 인스턴스를 통해 다양한 클라이언트, 프로세스 간에 데이터 공유Key Pointnew 로 새로운 인스턴스를 생성할 수 없도록 private 접근 제어자 필수유일한 단..

JAVA 2024.05.01

IoC, DI, AOP 와 Spring

의존성이란 무엇인가? 한 클래스가 다른 클래스의 메소드나 데이터를 사용하는 경우를 '의존한다.'라고 말한다. 코드레벨에서의 의존성 1. 생성자 의존성클래스가 다른 클래스의 인스턴스를 필요로 할 때, 생성자를 통해 직접 생성하는 경우class Engine {}class Car { private Engine engine; public Car() { this.engine = new Engine(); // Engine 클래스에 대한 의존성 }} !발생할 수 있는 단점Car 객체 생성자에서 Engine 생성자를 new를 통해 직접 생성하고 있음--> Car가 Engine에 직접적으로 의존하고 있고, 클래스 간에 너무 강하게 결합되어 있다.--> Engine 클래스의 구현을 변경하거나,..

JAVA 2024.05.01

자바의 제네릭(Generic)

1. 제네릭이란 무엇인가? 구현 시에 클래스 내부에서 타입을 지정하는 것이 아니라, 일반화 해두고 선언시에 개발자가 타입을 지정하여 사용하는 것. public class Box { private T content; public void setContent(T content) { this.content = content; } public T getContent() { return content; } public static void main(String[] args) { // Integer를 위한 Box 생성 Box integerBox = new Box(); integerBox.setContent(10); int intValue = integerBox.getContent(); System.out.print..

JAVA 2024.04.08

자바의 신 인사이트 정리

클래스와 인스턴스 1. 클래스란 무엇인가? 자바의 최소 단위, 클래스는 상태와 행동을 가짐 상태와 행동이란 무엇인가? 자바에서 상태는 속성들의 집합, 행동은 메서드로 정의할 수 있음 변수는 그 자체로 상태라기보다는 하나의 속성! 속성이 메서드에서 어떤 행동들을 하게 되고 -> 그러면 어떤 상태라고 정의할 수 있다. 2. 인스턴스란 무엇인가? 클래스는 인스턴스(객체)를 생성하기 위한 틀. 클래스 자체로는 어떤 작업을 할 수 없음. 인스턴스 생성해서, 인스턴스를 통해 작업을 수행하는 것 즉, 인스턴스가 메모리(heap) 영역에 올라가서 실제로 작업이 되는 것. public class Person { // 필드(속성) private String name; private int age; // 생성자(Constr..

JAVA 2024.03.21