[모던 자바 인 액션] 1. JAVA의 변화 & JAVA 8의 특성

    1.1 자바의 진화📌 자바의 특성스레드와 락을 이용한 동시성 지원코드를 JVM 바이트 코드로 컴파일📌 자바의 발전자바 8 이전의 대부분의 자바 프로그램은 코어 중 하나만을 사용했다. 즉, 나머지 코어는 유휴 idle 상태로 두거나, 운영체제나 바이러스 검사 프로그램과 프로세스 파워를 나누어서 사용했다.나머지 코어를 활용하기 위해서는 스레드를 사용하는 것이 좋을 것이다. 하지만 스레드는 관리하기 어려우므로 병렬 실행 환경을 쉽게 관리하고 에러가 덜 발생하는 방향으로 진화하려 노력했다.자바 1.0 : 스레드와 락, 메모리 모델 지원자바 5 : 스레드 풀, 병렬 실행 컬렉션자바 7 : 포크/조인 프레임워크자바 8 : 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법 제공자바 9 : 리액티브 프로그래..

    IaaS, PaaS, SaaS 차이점

    aaS(as a Service)는 조직과 개인이 IT 자산을 소비하는 방식을 가리키며, 기존 온프레미스 IT와 클라우드 컴퓨팅의 차이점이다. 기존 온프레미스 IT에서는 고객이 IT 자산(하드웨어, 시스템 소프트웨어, 애플리케이션 및 개발 툴)을 온프레미스 데이터 센터에서 구매, 설치, 유지 관리하는 방식으로 소비한다. 클라우드 컴퓨팅에서는 클라우드 서비스 제공업체가 IT 자산을 소유, 관리, 유지 보수한다. 고객은 웹 브라우저, 플랫폼 또는 대시보드에서 인터넷 연결을 통해 그 자산을 소비한다. 아울러 사용량 기준 또는 서브스크립션 방식으로 IT 자산에 대한 비용을 지불한다. 기업이 클라우드 여정을 계획할 때, 온프레미스에서 관리할 IT 자산의 범위, 그리고 서비스 제공업체에 관리를 맡길 IT 자산의 범위..

    [JAVA] Java Edition

    1. Java Edition ⭐ JavaME자바 마이크로 에디션은 제한된 자원을 가진 휴대폰, PDA, 셋탑박스 등에서 Java프로그래밍 언어를 지원하기 위해 만들어진 플랫폼이다. 임베디드 시스템에서 자바로 프로그램을 개발할 때 이용한다.⭐ JavaSE(Standard Edition)자바 스탠다드 에디션은 가장 보편적으로 쓰이는 자바 API집합체(패키지)이다. Java SE는 Java Software Development Kit(SDK)으로 구현된다.⭐ JavaEE(Enterprise Edition)Java SE 스펙기반으로 자바를 이용한 서버측 개발을 위한 플랫폼입니다. 엔터프라이즈 환경을 위한 도구로 EJB, JSP, Servlet, JNDI 등을 지원하며 애플리케이션 개발에 주로 사용된다.EJB(E..

    Deep Dive Into Design Patterns - 데코레이터 패턴

    💡 데코레이터(Decorator) 패턴이란?대상 객체에 대한 기능 확장이나 변경이 필요할 때 객체의 결합(새로운 행동을 포함한 특수 래퍼 객체들 내에 추가)을 통해 서브클래싱 대신 쓸 수 있는 구조적 디자인 패턴입니다. 데코레이터 패턴을 이용하면 필요한 추가 기능의 조합을 런타임에서 동적으로 생성할 수 있습니다. 대상 객체를 새로운 행동들을 포함한 데코레이터 객체에 넣어서 행동들을 해당 장식자 객체마다 연결시킵니다. 서브클래스로 구성할 때 보다 훨씬 유연하게 기능을 확장 할 수 있고, 기능을 구현하는 클래스들을 분리함으로써 수정이 용이해집니다. 💡 클래스 다이어그램으로 본 데코레이터 패턴Component : 원본 객체와 장식된 객체 모두를 묶는 역할.Concrete Component : 원본 객체. ..

    Deep Dive Into Design Patterns - 커맨드 패턴

    💡 커맨드(Command) 패턴이란?요청(기능)을 캡슐화하여 요청에 대한 모든 정보를 객체화하는 행동 디자인 패턴입니다. 요청에 대한 정보로는 메서드 이름, 매개변수 등이 있으며, 사용자가 보낸 요청을 저장, 로깅, 또는 취소할 수 있습니다. 💡 클래스 다이어그램으로 본 커맨드 패턴발동자(Invoker) : 요청들을 시작하는 역할을 하는 클래스로, 수신자 대신 커맨드 객체를 작동시킴으로써 요청합니다. 또, 요청에 대한 기록을 남길 수 있고, 한 발동자 객체에 다수의 커맨드 객체가 전달될 수 있습니다.Command Interface : 일반적으로 커맨드를 실행하기 위한 단일 메서드만을 선언합니다.Concrete Command : 다양한 유형의 요청을 구현. 자체적으로 작업을 수행해서는 안 되며, 대신 ..

    Deep Dive Into Design Patterns - 전략 패턴

    💡 전략(Strategy) 패턴이란?알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴입니다. 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있습니다. 즉, 어떤 일을 수행하는 알고리즘이 여러가지일 때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있게 합니다. 따라서 알고리즘 변형이 빈번하게 필요한 경우에 적합합니다. GoF의 디자인 패턴 책에서는 전략 패턴을 다음과 같이 정의합니다.동일 계열의 알고리즘군을 정의하고각각의 알고리즘을 캡슐화하며,알고리즘을 사용하는 클라이언트와 상관없이 독립적으로알고리즘을 다양하게 변경할 수 있게 한다.즉, 전략 패턴은 SOLID 원칙의 O..

    Deep Dive Into Design Patterns - 상태 패턴

    💡 상태(State) 패턴이란?객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 하는 행동 디자인 패턴입니다. 객체가 행동을 변경할 때 객체가 클래스를 변경한 것처럼 보일 수 있습니다. 즉, 상태를 조건문으로 검사해서 행위를 달리하는 것이 아닌, 상태를 객체화 하여 상태가 행동을 할 수 있도록 위임하는 패턴을 말합니다. 전략 패턴(Strategy Pattern)이 '전략 알고리즘'을 클래스로 표현한 패턴이라면, 상태 패턴(State Pattern)은 '객체 상태'를 클래스로 표현한 패턴이라고 보면 됩니다. 따라서 상태 패턴의 클래스 다이어그램을 보면 전략 패턴과 매우 유사합니다. 그러나, 상태 패턴에서의 특정 상태들은 서로를 인식하고 한 상태에서 다른 상태로 전이를 시작할 수 있..

    Deep Dive Into Design Patterns - 템플릿 메서드 패턴

    💡 템플릿 메서드(Template Method) 패턴이란?부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의)할 수 있도록 하는 행동 디자인 패턴입니다. 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현합니다. 템플릿 메소드 패턴은 상속이라는 기술을 극대화하여,알고리즘의 뼈대를 맞추는 것에 초점을 둡니다. 이미 수많은 프레임워크에서 많은 부분에 템플릿 메소드 패턴 코드가 우리도 모르게 적용되어 있습니다. 💡 클래스 다이어그램으로 본 템플릿 메서드 패턴Abstract Class : 알고리즘의 단계들의 역할을 하는 메서드들을 선언하며,..

    Deep Dive Into Design Patterns - 빌더 패턴

    💡 빌더(Builder) 패턴이란?객체를 생성하기 전에 점진적으로 객체의 정보를 수집하여 복잡한 객체들을 단계 별로 생성하는 생성 디자인 패턴입니다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식입니다. 일반적으로는 생성자를 제공하여 객체를 생성하지만, 생성 객체에 초기값을 주거나 생성할 클래스를 선택하고 싶을 때 변형이 필요합니다. 즉, 객체 생성을 클래스 로직 밖으로 옮길 필요가 있을 때 빌더 패턴을 사용합니다.public static void main(String[] args) { // 생성자 방식 Hamburger hamburger = new Hamburger(2, 3, 0, 3, 0, 0); // 빌더 방식 Hambu..

    Deep Dive Into Design Patterns - 플라이웨이트 패턴

    💡 플라이웨이트(Flyweight) 패턴이란?재사용 가능한 객체 인스턴스를 공유시켜 메모리 사용량을 최소화하는 구조 패턴입니다. 각 객체에 모든 데이터를 유지하는 대신 여러 객체들 간에 상태의 공통 부분들을 공유하여 사용할 수 있는 RAM에 더 많은 객체들을 포함할 수 있도록 합니다. 자주 변하는 속성(extrinsic)과 변하지 않는 속성(intrinsic)을 분리하고, 변하지 않는 속성을 캐시하여 재사용해 메모리 사용을 줄입니다. 그래서 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 최적화를 노리는 경량 패턴이라고 불립니다. 💡 클래스 다이어그램으로 본 플라이웨이트 패턴Flyweight : 경량 객체를 묶는 인터페이스.Flyweight State : 플라이웨이..

    Deep Dive Into Design Patterns - 책임 연쇄 패턴

    💡 책임 연쇄(Chain of Responsibility) 패턴이란?핸들러들의 체인(사슬)을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴입니다. 클라이어트의 요청에 대한 세세한 처리를 하나의 객체가 몽땅 하는 것이 아닌, 여러 개의 처리 객체들로 나누고, 이들을 사슬(chain)처럼 연결해 집합 안에서 연쇄적으로 처리하는 행동 패턴입니다. 이러한 처리 객체들을 핸들러(handler)라고 부르는데, 요청을 받으면 각 핸들러는 요청을 처리할 수 있는지 판단하고, 없으면 체인의 다음 핸들러로 처리에 대한 책임을 전가합니다. 처리에 대한 책임을 요청을 보내는 쪽(sender)과 요청을 처리하는(receiver) 쪽을 분리하여 각 객체를 부품으로 독립시키고 결합도를 느슨하게 만들며, 상황에 따라서 요청..

    Deep Dive Into Design Patterns - 프록시 패턴

    💡 프록시 패턴이란?대상 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴입니다. “프록시”의 사전적인 의미인 ‘대리인’처럼, 클라이언트가 대상 객체를 직접 사용하는 게 아니라 중간에 프록시(대리인)을 거쳐서 사용하는 코드 패턴입니다. 따라서 대상 객체(Subject)의 메소드를 직접 실행하는 것이 아닌, 대상 객체에 접근하기 전에 프록시(Proxy) 객체의 메서드를 접근한 후 추가적인 로직을 처리한뒤 접근하게 됩니다. 프록시는 실제 객체에 액세스하지 않고, 정상적 또는 비정상적인 메시지를 처리할 수 있게끔 합니다. 💡 프록시 패턴을 쓰는 이유프록시 패턴은 대상 클래스가 민감한 정보를 가지고 있거나 인스턴스화 하기에 무겁거나 추가 기능을 가미하고 싶은데, 원본 객체를 수정..