📖 Books

    [Books] PSA 일관성 있는 서비스 추상화..요?

    PSA(Portable Service Abstraction) 너 뭔데? 직역하자면 일관성 있는 서비스 추상화! 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한 것을 서비스 추상화라고 한다. 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 서비스 추상화(Service Abstraction)이라 한다. 서비스 추상화(Service Abstraction)로 제공되는 기술을 다른 기술 스택으로 간편하게 바꿀 수 있는 확장성을 갖고 있는 것이 Portable Service Abstraction이다. 환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 것을 의미한다. Spring은 Spring Web MV..

    [Books] 어댑터요? 돼지코 같은건가? 🐷

    어댑터 디자인 패턴(Adapter Pattern)이란? 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것! (like 휴대폰 충전기) 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다. 이렇게 함으로써 클라이언트와 구현된 인터페이스를 분리시킬 수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화되기 때문에 클라이언트는 바뀔 필요가 없어진다. 개방 폐쇄 원칙을 활용한 설계 패턴이다. JDBC, JRE도 어댑터 패턴! 어댑터 패턴 호출 과정 클라이언트에서는 타겟 인터페이스를 호출하는 것처럼 보인다. 하지만 클라이언트의 요청을 전달받은 (타겟 인터페이스를 구현한) 어댑터는 자신이 감싸고 있는 어댑티에게 실질적인 처리를 위임한다. 어댑터가 어댑티를 감싸고 있는 것..

    [Books] 하나의 객체는 하나의 책임만 가져야 한다?

    1객체 1책임 == 단일 책임 원칙 SRP(Single Responsibility Principle)란? 하나의 클래스는 단 한 개의 책임을 져야 한다는 의미이다. 만약 하나의 클래스가 하나 이상의 책임이 있다면, 이것은 결합(Coupled)을 불러오게 되며 추후 하나의 책임에 대한 변경이 생겼을 때 결합으로 인해 다른 책임까지 수정을 발생시키게 된다. 책임의 기준이 뭔데? 한 가지 책임의 기준은 뭘 의미하는 걸까? 여기서 말하는 단일 책임은 절대적으로 측정할 수 있는 개념이 아니라 상대적이기 때문에 기준이 모호하다. 어느 정도의 수준으로 추상화를 하느냐에 따라서 ‘단일’로 볼 수도 있고 아닐 수도 있다. 하지만, SOLID 원칙의 창시자인 Robert C. Martin은 단일 책임 원칙에 대해 같이 수..

    [Books] Java에 초기화 블록이 있다는 사실 아셨나요?

    초기화블록? 그게 뭔데? 🤦‍♀️ 초기화 블록(initialization block)이란? 클래스 필드의 초기화만을 담당하는 중괄호{}로 둘러싸인 블록을 의미한다. 클래스 변수, 인스턴스 변수의 초기화가 복잡하거나 공통된 부분이 많을 경우 초기화 블록을 사용하면 코드를 간결하게 할 수 있다. 초기화 블록은 생성자보다 먼저 호출되며, static 키워드의 유무에 따라 다음과 같이 구분한다. Static Block(클래스 초기화 블록) Instance Block(인스턴스 초기화 블록) Static Block(클래스 초기화 블록) 클래스가 처음으로 메모리에 로딩될 때 단 한 번만 실행 생성자나 인스턴스 초기화 블록으로는 수행할 수 없는 클래스 변수의 초기화를 수행 class InitBlock { static ..

    [Books] 클래스와 객체의 관계가 붕어빵과 붕어빵 틀이 아니라고?!

    붕어빵의 배신 "붕어빵 틀에서 붕어빵을 찍어내지? 그러니까 붕어빵 틀은 클래스가 되는 거고 붕어빵은 객체가 되는 거야. 이 new라는 연산자를 사용해서 붕어빵 틀에서 붕어빵을 찍어낼 수 있어!" 모두가 익숙했던 예시겠지만, 사실 클래스와 객체의 관계는 붕어빵과 붕어빵 틀이 아니다. 바로 예시부터 알아보자. 클래스 객체명 = new 클래스(); 붕어빵틀 붕어빵 = new 붕어빵틀(); // ?? 금형기계 붕어빵틀 = new 금형기계(); // ????? 새로운 금형기계를 하나 만들었더니 붕어빵틀이 되었다? 무언가 잘못된 예제임을 알 수 있다. 클래스와 객체의 관계를 이해하기 전에 먼저 객체가 무엇인지, 클래스는 또 무엇인지 이해해야 한다. 객체(Object)가 뭔데? 세상에 존재하는 모든 것은 사물, 즉 ..

    [Books] 전역변수 사용을 왜 지양해야 할까?

    전역 변수란? static 변수(클래스 변수)란? 여러 인스턴스가 공유해서 사용할 수 있는 변수 인스턴스 변수처럼 객체가 new연산자로 인스턴스화 될 때 생성되는 변수가 아닌, 프로세스가 메모리에 로드되는 순간 정적변수 영역(데이터 영역)에 딱 한번만 생성되는 변수이고, 이는 프로세스가 끝나서 언로드 될때까지 메모리에 상주한다. 따라서 인스턴스의 생성과 상관없이 사용할 수 있다. 전역 변수의 문제점 1. static은 객체 지향적이지 않다. static 변수는 객체 지향의 패러다임과 상반된다. 한 객체가 가지고 있는 데이터들은 외부에서 함부로 접근하여 수정할 수 없도록 해야 한다는 원칙, 즉 OOP에서 중요한 요소 중 하나인 은폐성을 갖추지 못한다. 2. 전체 프로그램과 동일한 라이프사이클 static ..

    [Books] 자바는 어떻게 개발자에 대한 사랑을 실천했을까?

    🧐 새로운 시선으로 바라보는 Java의 특징 1. 플랫폼에 독립적인 언어 “Java가 인간을 사랑한 방법은 바로 가상머신(Virtual Machine)이다.” 0과 1만 있던 기계어에서 인간 지향적인 어셈블리어를 거쳐 강력한 이식성을 가진 C언어에 오기까지 인간을 위해 많은 발전이 있었지만 C언어로 작성한 소스를 다른 기종의 컴퓨터에서 실행하려면 각각의 컴파일러가 필요했다. Java는 기종이 몇 개든 단 하나의 JVM용 기계어를 생성하여 어떤 운영체제에서도 실행이 가능하다. 이게 가능한 이유는 모두 가상머신 덕분이다. Java는 컴퓨터 운영체제에 맞는 VM에 코드를 올려 그 코드가 운영체제에 맞게 해독하도록 변경해 준다. Write once, run anywhere! 2. 객체 지향 언어(OOP, Obj..