[오브젝트] 2장. 객체 지향 프로그래밍 영화 예매 시스템을 객체 지향 프로그래밍으로 구현하는 방법을 설명합니다. 영화, 상영, 사람, 할인 정책, 할인 조건 등의 객체를 정의하고, 객체 간의 협력을 통해 할인 요금을 계산하는 방법을 제시합니다.
[오브젝트] 1장. 객체, 설계 소프트웨어 개발에서 변경 용이성과 의사소통은 중요하며, 이를 위해 객체 지향 설계를 적용해야 합니다. 객체는 자신의 데이터를 스스로 관리하는 자율적인 존재이며, 객체 간의 의존성을 적절하게 관리하는 것이 훌륭한 설계입니다.
[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라 자바에서 불필요한 객체 생성을 최소화하여 성능을 향상시키는 방법에 대해 설명합니다. 문자열, 부울, 정규 표현식, 뷰 객체, 오토 박싱 등 다양한 예시와 함께 객체 재사용의 중요성을 강조합니다. 특히 방어적 복사가 필요한 경우 객체 재사용으로 인한 문제점을 주의해야 합니다.
[이펙티브 자바] 아이템 5. 자원을 명시하지 말고 의존 객체 주입을 사용하라 클래스가 내부적으로 하나 이상의 자원에 의존하는 경우, 싱글턴과 정적 유틸리티 클래스 대신 의존 객체 주입을 사용하는 것이 좋습니다. 의존 객체 주입을 통해 클래스의 유연성, 재사용성, 테스트 용이성을 향상시킬 수 있습니다.
[이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 정적 메서드와 필드만을 가진 유틸리티 클래스는 인스턴스화를 막기 위해 생성자를 private으로 선언하는 것이 좋습니다. 이를 통해 컴파일러가 자동 생성하는 기본 생성자를 제어하고 클래스 외부에서의 인스턴스화를 방지할 수 있습니다.
[이펙티브 자바] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴은 인스턴스를 하나만 생성할 수 있는 클래스로, 무상태 객체나 시스템 컴포넌트를 구현하는 데 사용됩니다. 싱글턴을 만드는 방법은 public static 멤버, 정적 팩터리 메서드, 열거 타입을 사용하는 방식 등이 있으며, 각 방식은 장단점이 있습니다. 특히 열거 타입을 사용하는 방식은 리플렉션 공격에도 안전하고 코드가 깔끔하여 가장 바람직한 방법으로 여겨집니다. 싱글턴 클래스를 직렬화할 때는 transient 키워드와 readResolve() 메
[이펙티브 자바] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 매개변수가 많은 클래스를 생성할 때 빌더 패턴을 사용하면 코드 가독성을 높이고, 안정적인 객체 생성을 보장할 수 있습니다. 빌더 패턴은 필수 매개변수를 이용하여 빌더 객체를 생성하고, setter 메서드를 통해 선택 매개변수를 설정하며, build() 메서드를 호출하여 최종 객체를 얻는 방식입니다. 빌더 패턴은 클라이언트 입장에서 코드 작성 및 읽기가 용이하며, 계층적으로 설계된 클래스와 잘 어울립니다.
[이펙티브 자바] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드는 생성자 대신 인스턴스를 생성하는 데 사용할 수 있는 유용한 방법입니다. 이름을 가질 수 있고, 생성자보다 더 많은 유연성을 제공하며, 플라이웨이트 패턴, 싱글톤 패턴, 서비스 제공자 프레임워크와 같은 디자인 패턴을 구현하는 데 사용할 수 있습니다.
Java Collections Framework(JCF)란? - JCF의 정의와 특징 (JAVA) Java Collections Framework(JCF)는 자바에서 데이터를 쉽고 효과적으로 처리할 수 있도록 표준화된 방법을 제공하는 클래스 집합입니다. JCF는 데이터 저장 자료 구조와 처리 알고리즘을 클래스로 구현하여 코드 재사용성을 높이고, 개발 시간을 단축하며 프로그램 성능과 품질을 향상시킵니다.
[Spring] Filter, Interceptor, Argument Resolver란? 필터는 웹 컨테이너에서 동작하며, 디스패처 서블릿에 요청이 전달되기 전/후에 추가 작업을 처리할 수 있는 기능을 제공합니다. 주로 요청 파라미터 검증 및 처리, 보안 관련 공통 작업, 로깅, 이미지/데이터 압축, 문자열 인코딩 등에 사용됩니다.
[Spring] @Async 사용 방법 Spring @Async를 사용하여 Java에서 비동기 처리를 구현하는 방법을 설명합니다. @EnableAsync 어노테이션을 사용하여 비동기 메소드를 선언하고, ThreadPoolTaskExecutor를 사용하여 스레드 풀을 구성하여 효율적인 비동기 작업 처리를 수행할 수 있습니다. Future, ListenableFuture, CompletableFuture 등 다양한 리턴 타입을 사용하여 비동기 메소드의 결과를 처리하는 방법도 다룹니다.
[Java] Synchronized Collection vs Concurrent Collection 자바에서 동기화된 컬렉션(Vector, Hashtable, Collections.synchronizedXXX)은 멀티 스레드 환경에서 동시성을 보장하지만, 성능 저하와 여러 연산을 묶어 사용할 때 문제 발생 가능성이 있습니다. 대안으로 java.util.concurrent 패키지의 병렬 컬렉션(CopyOnWriteArrayList, ConcurrentHashMap 등)을 사용하면 읽기 성능 향상과 효율적인 동시성 처리가 가능합니다.
equals() vs hashCode() equals()와 hashCode()는 객체의 동등성과 동일성을 비교하는 데 사용하는 Java 메소드입니다. equals()는 객체의 내용이 같은지 비교하는 반면, hashCode()는 객체의 메모리 주소를 반환하여 객체의 고유성을 확인합니다. equals()와 hashCode()를 함께 재정의하면 해시 기반 자료 구조에서 객체의 동등성을 올바르게 비교할 수 있습니다.
[Java] Reflection 개념 및 사용 방법 리플렉션은 자바 프로그램 실행 중에 클래스 정보에 접근하여 클래스를 조작할 수 있도록 지원하는 API입니다. 런타임 시점에서 클래스를 생성하고 필드와 메소드에 접근할 수 있지만, 캡슐화를 저해하고 성능 저하를 유발할 수 있으므로 신중하게 사용해야 합니다. Spring 프레임워크와 같이 런타임 시 객체를 동적으로 생성하고 관리해야 하는 상황에서 유용하게 활용됩니다.
[DB] 캐시를 설정하는 기준 자주 읽지만, 쓰기 빈도가 낮은 데이터를 캐싱하는 방법과 로컬 캐싱, 글로벌 캐싱의 장단점을 비교 분석했습니다. 특히, 캐싱할 데이터의 종류, TTL 설정 방법, 실무 적용 사례와 함께 앞으로 성능 테스트 계획을 소개합니다.