자바에서 불필요한 객체 생성이란 무엇을 의미할까? 똑같은 기능의 객체를 매번 생성하기보다는 객체하나를 재사용하는 편이 나을 때가 많다. 그래서 주로 말이 나오는게 모두가 아는 싱글톤패턴이지 않은가? 뭐 읽기 전용이라면 싱글톤이 유리하겠지만 멀티스레드 환경에서 해당 자원을 CUD하는 목적이면 이 싱글톤은 안티패턴이라고 한다고 한다. 공유 자원을 회손하기 때문이다. 지금 필자가 포스팅하는 내용은 싱글톤이 아닌 말그대로 불필요한 객체 생성은 주로 어떤 점에서 볼 수 있는지 기록해두려고 한다. 간단한 예제부터 우리가 잘 모르고 사용하던 응용 예제까지 살펴보도록 하자. String s = new String("lee_seunghun"); 이 문장은 실행될 때마다 String 인스턴스를 새로 만든다. 생성자로 넘겨..
자바 리플렉션이란 자바 리플렉션 API(Java Reflection API)는 자바 클래스, 인터페이스, 메서드, 필드 등의 정보를 동적으로 검색하고, 분석하고, 조작할 수 있는 기능을 제공한다. 이를 통해 실행 중인 자바 애플리케이션에서 객체를 조작하거나 클래스의 동적 로딩, 메서드 호출 등을 가능하게 한다. // 클래스 로딩 Class myClass = Class.forName("com.example.MyClass"); // 객체 생성 Object myObject = myClass.newInstance(); // 메서드 호출 Method myMethod = myClass.getMethod("myMethod", String.class); myMethod.invoke(myObject, "hello"); ..
정의 옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴을 말한다, e.g.) 유튜브 채널을 구독 후 알림설정 버튼을 누르면 유튜브 알림이 뜨게 설계한다고 가정할 경우, 주제 객체는 유튜브 채널, 옵저버는 구독자가 된다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용되며 발행/구독 모델로 알려져 있기도 하다. 구조 이 패턴의 핵심은 옵저버 또는 리스너(Listener)라고 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시키는 것이다. 구현 원리 이벤트를 발생시키는 Class B가 있고, 해당 클래스가 발생하는 이벤트를 수신 받고 싶어하는 Class..
📌 팩토리 메소드 패턴이란 ? 자바 디자인패턴 중 하나로 객체의 생성을 대신 수행해주는 공장이라고 할 수 있다. 객체의 생성은 하위 클래스에서 대신한다. 객체를 직접 생성하지 않고 메소드를 통해서 간접적으로 생성한 후 반환하는 형식 특징) Factory 클래스를 이용하여 객체 생성 하나의 메서드로 여러 개의 종류의 객체를 생성합니다. abstract, interface을 활용해 객체 생성을 서브 클래스에 위임 => 서브 클래스는 팩토리 메서드를 구현해 객체를 생성 Product : 팩토리 메소드가 생성하는 객체의 인터페이스 정의 ConcreteProduct : Product 클래스에 정의된 인터페이스를 실제로 구현하는 클래스 Creator : Product 타입의 객체를 반환하는 팩토리 메서드를 선언하는..
제네릭이란(Generic) 데이터형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법이다. 객체 객체명 = new 객체();: 괄호 안에 들어가는 타입을 지정해준다 우리가 어떤 자료구조를 만들어서 이용할때 String, Int타입등 다양하게 많은 타입을 지원하고 싶으면? 타입에 맞춰 하나하나 선언하기엔 너무 비효율적이다. 그래서 우리가 제네릭이라는 것을 사용한다. 이렇듯 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다. 제네릭의 장점 제네릭을 사용하면 잘못된 타입이 들어..
정적(Static)이란? 정적(static)은 고정된이란 의미를 가지고 있다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이 둘을 합쳐 정적 멤버라고 한다. (클래스 멤버라고도 한다.) 정적 필드와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다. 정적(Static) 멤버 생성 new 키워드가 붙으면 메모리 힙 영역에 위치 (메모리에 올린다)하는 반면 Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할..