Java
-
책임 연쇄 패턴이란?Java 2022. 7. 19. 00:01
책임 연쇄 패턴(Chain of responsibility)이란? 책임이란? 클래스 단위로 무언가를 처리하는 기능 연쇄란? 여러 개의 책임들을 동적으로 연결해서 순차적으로 실행함 책임 연쇄란? 즉, 기능을 클래스 별로 분리한 후 각 기능(클래스)을 동적으로 연결하여 순차적으로 실행합니다. 다음은 책임 연쇄 패턴의 예시입니다. 여러개의 클래스들이 클라이언트의 요청을 처리하기 위해 객체를 체인 형태로 전달하여 결합력을 낮춥니다. 등장배경 이해를 하기 쉽게 여러가지 방법을 사용해 결제하는 상황을 연출하여 보겠습니다. 만약 결제를 할 때 다음과 같은 수단으로 결제할 수 있다고 가정하겠습니다. - 현금(Cash)으로 결제할 수 있다. - 신용카드(Credit Card)로 결제할 수 있다. 간단하게 코드를 작성하여..
-
불변객체란 무엇인가?Java 2022. 5. 29. 19:07
불변 객체란? 객체 생성 이후 내부의 상태가 변하지 않는 객체입니다. 불변 객체는 read-only 메서드만을 제공하며 객체의 내부 상태를 제공하는 메서드를 제공하지 않거나 방어적 복사를 통해 제공합니다. Java 대표적인 불변 객체로는 String이 있습니다. 방어적 복사란? 예를 들어 Java의 String은 불변 객체 이기 때문에 String의 내부의 char형 배열을 얻어 수정을 해도 반영이 되지 않습니다. String은 객체이기 때문에 참조를 통해 값을 수정하면 내부의 상태가 변하기 때문에 내부를 복사하여 전달하는 것을 방어적 복사라고 합니다. 실제로 다음과 같이 name은 변경해도 변하지 않습니다. String name = "Old"; char changed = name.toCharArray(..
-
Java에 원시타입(primitive type)이 존재하는 이유Java 2022. 5. 28. 13:17
한 줄 요약하자면 다음과 같습니다. 원시 타입이 참조 타입에 비해 메모리 및 CPU 처리 측면에서 더 가볍고 효율적이기 때문입니다. 원시 타입과 참조 타입 자바에서는 데이터 타입을 크게 두 가지 원시 타입과 참조 타입이 있습니다. 원시 타입은 정수, 실수, 문자, 논리 등의 실제 데이터 값을 저장하는 타입입니다. 참조 타입은 객체의 주소를 저장하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입입니다. 최근에 Java는 왜 Pure OOP가 아닐까?라는 질문에 대답을 하는 과정에서 원시 타입을 지원하고 있기 때문에라고 대답했습니다. https://junuuu.tistory.com/286?category=968252 Java는 왜 Pure OOP가 아닐까? Pure OOP란? 말 그대로 순수하게 완전..
-
전략 패턴이란?Java 2022. 5. 25. 19:43
다음 글은 아래의 영상을 기반으로 제작되었습니다. https://www.youtube.com/watch?v=vNsZXC3VgUA 전략 패턴이란? 전략이란 특정한 목표를 수행하기 위한 행동 계획입니다. 디자인 패턴 중 하나로써 객체가 할 수 있는 행위를 각각의 전략으로 만들어 놓고 사용하며 동적으로 전략 수정이 가능한 패턴입니다. 디자인 패턴이란? 소프트웨어 디자인을 하는 데 있어 공통적으로 마주치는 문제의 해결하는 방법이 하나의 패턴처럼 굳어진 것을 말합니다. 전략 패턴의 예시 예를 들어 배민 로봇 전략 예시가 있습니다. 이동 전략에는 "걸어서, 뛰어서, 날아서, 로켓으로" 가 있다고 가정하겠습니다. 온도 전략에는 "차갑게 따뜻하게 냉동으로 뜨겁게" 가 있다고 가정하겠습니다. 동일 계열의 알고리즘 군을 ..
-
Java는 왜 Pure OOP가 아닐까?Java 2022. 5. 10. 00:38
Pure OOP란? 말 그대로 순수하게 완전히 OOP를 지향하고 관련 기능을 지원하는 언어를 말합니다. 프로그래밍 언어가 Pure OOP를 지원하기 위해서는 7가지 특성이 충족되어야 합니다. Encapsulation/Data Hiding(캡슐화/은닉화) Inheritance(상속) Polymorphism(다형성) Abstraction(추상화) All predefined types are objects (이미정의 된 타입들은 모두 객체여야 한다) All user defined types are objects (사용자가 정의한 타입들은 모두 객체여야 한다.) All operations performed on objects must be only through methods exposed at the obje..
-
객체지향 5원칙 : SOLIDJava 2022. 4. 22. 23:25
아주 유명한 객체지향 5원칙인 SOLID에 대해서 자세하게 알아보겠습니다. SOLID란? 로버트 마틴이 2000년대 초에 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙의 앞글자를 따서 SOLID라는 이름으로 소개한 것입니다. 1. SRP(Single Reponsibility Principle) SOLID 원칙의 제일 앞글자인 S에 해당하는 원칙으로 이름 그대로의 의미를 가집니다. 단일 책임 원칙 즉, 하나의 클래스는 하나의 기능만 가진다는 의미입니다. 하나의 기능? 과연 하나의 기능을 어디까지의 범위로 볼 것인가는 모호합니다. 따라서 변경이라는 키워드에 초점을 맞추어 변경사항이 있을때 다른 클래스들에게 미치는 영향이 적으면 SRP 원칙을 잘 따른 것으로 볼 수 있습니다. SRP 원칙을 적용하게 되면..
-
자바 Inner static class 로딩 시점Java/자바를 더 깊게 2022. 4. 10. 01:23
싱글톤 패턴을 공부하던 중 Lazy 로딩을 하며 스레드 세이프하게 구현하기 위해서 static inner class를 사용해서 구현했습니다. Lazy Initialization, LazyHolder (static inner class를 사용하여 구현) public class Singleton { private Singleton() {} private static class InnerInstanceClass { // 클래스 로딩 시점에서 생성 private static final Singleton uniqueInstance = new Singleton(); } public static Singleton getInstance() { return InnerInstanceClass.instance; } } In..
-
[Java] 빌더 패턴Java 2022. 4. 9. 00:01
빌더 패턴이란? 빌더 패턴은 인스턴스를 생성할 때 생성자(Constructor)만을 통해서 생성하는데 어려움이 있어서 고안된 패턴입니다. 클래스에 생성자 인자가 많다면 어떠한 인자가 어떠한 값을 나타내는지 알기 어렵기 때문입니다. 예제를 통해서 자세하게 알아보겠습니다. 다음은 User 클래스입니다. public class User { private int userIdx; // 선택 private String name; // 필수 private String part; // 필수 private int age; // 선택 private String email; // 선택 } 만약 User 클래스에서 필수적으로 받아야 하는 정보, 선택적으로 받아야 하는 정보가 있다고 가정해 보겠습니다. 빌더 패턴을 사용하지 않..