전체 글160 [Spring] SOLID와 스프링 목차 서론 SOLID의 원칙과 스프링을 연관지어 알아봅시다. 클린 코드로 유명한 로버트 마틴의 좋은 객체 지향 설계의 5가지 원칙 (SOLID) SRP: 단일 책임 원칙 (Single Responsibility Principle) OCP: 개방-폐쇄 원칙(Open/Closed Principle) LSP: 리스코프 치환 원칙(Liskov Substitution Principle) ISP: 인터페이스 분리 원칙(Interface Segregation Principle) DIP: 의존관계 역전 원칙(Dependency Inversion Principle) SRP 단일 책임 원칙 Single Responsibility principle 한 클래스는 하나의 책임만 가져야 한다는 원칙입니다. 하지만, 하나의 책임이.. 2023. 7. 20. [Spring] 스프링은 왜 만들었나요? 스프링과 객체지향 목차 서론 스프링 기술을 왜 만들었고, 이 기술의 핵심 컨셉이 무엇인지 알아봅시다. 스프링의 핵심 개념 및 컨셉? 사람들이 흔히들 하는 오해는 다음과 같습니다. 웹 애플리케이션을 만들고, DB 접근을 편리하게 해주는 기술이다. 전자 정부 프레임워크이다. 웹 서버를 자동으로 띄워주는 기술이다. 클라우드, 마이크로서비스를 위한 기술이다. 스프링의 진짜 핵심 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징은 객체 지향 언어이다. 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다. 스프링은 좋은 개체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 여기서의 핵심은 스프링은 좋은 객체 지향 프로그래밍을 위한 프레임워크입니다. 좋은 객체 지향 프로그래밍은 무엇일까요?.. 2023. 7. 20. [effective java] item 3. 싱글톤임을 보장하기 위해 private 생성자 또는 열거 타입을 사용해라 싱글톤(singleton)이란? 인스턴스를 오직 하나만 생성할 수 있는 클래스입니다. 함수와 같은 무상태(stateless) 객체나, 설계상 유일해야 하는 시스템 컴포넌트를 예시로 들 수 있습니다. 단점 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있습니다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현하여 만든 싱글톤이 아니라면, 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문입니다. 싱글턴을 구현하는 3가지 방법 public static final 필드 private static 멤버를 정적 메토리 메서드로 제공 열거 타입 방식의 싱글톤 BEST 1번과 2번 방법은 모두 생성자를 private 으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 .. 2023. 7. 17. [effective java] item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩토리 메서드와 생성자의 제약 : 선택적 매개변수가 많을 때 대응하기가 어렵다. 정적 팩터리 메서드와 생성자에는 같은 제약이 하나 있습니다. 선택적 매개변수가 많을 때 적절히 대응하기가 어렵습니다. 식품 포장의 영양정보를 표현하는 클래스를 예시로 살펴봅시다. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량 당 칼로리 같은 필수 항목 몇 개와 총 지방, 트랜스지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄집니다. 그런데 대부분 제품은 이 선택 항목 중 대다수의 값이 그냥 0입니다. 대안 1. 점층적 생성자 패턴(telescoping constructor pattern) 우선 먼저, 이런 클래스를 생성할 때, 점층적 생성자 패턴(telescoping construc.. 2023. 7. 17. [effective java] item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 정적 팩토리 메서드(Static Factory Method)란? 정적 팩토리 메서드는 객체의 생성을 담당하는 클래스 메서드입니다. 자바의 String 클래스를 이용해 정적 팩토리 메서드가 무엇인지 알아봅시다. String.java의 valueOf public static String valueOf(@NotNull char data[]) { return new String(data); } 위 코드의 valueOf()은 파라미터로 char[]을 받아 String 객체를 생성해 반환합니다. 해당 함수를 호출하는 코드는 다음과 같습니다. String str = String.valueOf("hello"); 즉, 자바에서 String 객체를 만드려면 new 생성자를 사용하는 방법 외에 valueOf()을 사용하는 .. 2023. 7. 17. [effective java] 1장. 들어가기 이 책의 규칙 대부분은 아주 핵심적인 기본 원칙 몇 개에서 파생된다. 바로 명료성(clartiy)과 단순성(simplicity)이다. 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다. (정해진 동작이나 예측할 수 있는 동작만 수행해야 한다.) 컴포넌트는 가능한 작되, 그렇다고 너무 작아서는 안 된다. (이 책에서 컴포넌트란 개별 메서드부터 여러 패키지로 이뤄진 복잡한 프레임워크까지 재사용 가능한 모든 소프트웨어 요소를 뜻한다.) 코드는 복사되는 게 아니라 재사용되어야 한다. 컴포넌트 사이의 의존성은 최소로 유지해야 한다. 오류는 만들어지자마자 가능한 한 빨리 (되도록 컴파일 타임에) 잡아야 한다. 이 규칙들을 맹종하진 말아야 하나, 어겨야 할 때는 합당한 이유가 있어야 한다. 대다수 규율과 마.. 2023. 7. 17. 이전 1 ··· 11 12 13 14 15 16 17 ··· 27 다음