반응형

분류 전체보기 277

CORS란?

CORS(Cross Origin Resource Sharing) 번역하면 "교차 출처 자원 공유"이다. 이렇게 번역하면 이해하기 힘드니 "교차 출처" 대신하여 "다른 출처" 라는 단어로 풀어가 보려고 한다. CORS에 대한 설명을 하기 전에 Origin(출처)와 SOP에 대하여 정확하게 무엇을 의미하는지 알아보고 가자 Origin 위에 같은 URL 처럼 Origin은 Protocol, Host, Port까지 모두 합친 것을 의미한다. 즉, 서버를 찾아가기 위해 필요한 가장 기본적인 것들을 합쳐놓은 것이다. 또한 Origin 내의 포트 번호는 생략이 가능한데, 이는 각 웹에서 사용하는 HTTP, HTTPS 프로토콜의 기본 포트 번호가 정해져 있기 때문이다. ( HTTP -> 80 / HTTPS -> 443..

Web 2022.09.25

전략패턴(Strategy Pattern)

전략 패턴 ( Strategy Pattern ) 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. 간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다. Strategy: 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시 ConcreateStrategy1, 2, 3: 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스 Context: 스트래티지 패..

디자인패턴 2022.09.20

긴 매개변수 목록

어떤 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다 그 함수는 한가지 일을 하고 있는게 맞는가? 불필요한 매개변수는 없는가? 하나의 레코드를 뭉칠 수 있는 매개변수 목록은 없는가? 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, “매개변수를 질의 함수로 바꾸기”를 사용할 수 있다 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신,”객체 통째로 넘기기”를 사용할 수 있다 일부 매개변수들이 대부분 같이 넘겨진다면, “매개변수 객체 만들기”를 적용할 수 있다 매개변수가 플래그로 사용된다면, “플래그 인수 제거하기”를 사용할 수 있다 여러 함수가 일부 매개변수를 공통적으로 사용한다면 “여러 함수를 클래스 묶기”를 통해매개변수를 해당 클래스의 필드로 만들고 매서드에 ..

Language/Java 2022.08.15

프록시 패턴(Proxy Pattern)

프록시 패턴(Proxy Pattern) 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴 초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 할 수 있다 프록시 패턴 특징 원래 하려던 기능을 수행하며 그외의 부가적인 작업(로깅, 인증, 네트워크 통신 등)을 수행하기에 좋다. 비용이 많이 드는 연산(DB 쿼리, 대용량 파일 등)을 실제로 필요한 시점에 수행할 수 있다. 사용자 입장에서는 프록시 객체나 실제 객체나 사용법은 유사하므로 사용성이 좋다. 프록시 패턴의 종류 가상프록시 꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것 처럼 동작하도록 만들고 싶을 때 사용하는 패턴이다. 프록시 클래스에서 작은 단위의 작업을 처리하고 리소스가 많이 요구되는 작업들이 ..

카테고리 없음 2022.08.15

플라이웨이턴 패턴 (Flyweight Pattern)

플라이웨이턴 패턴 (Flyweight Pattern) 란? 여러 클래스의 인스턴스 한 개만 가지고 여러 개의 "가상 인스턴스"를 제공하고 싶을 때 사용하는 패턴이다. 인스턴스를 가능한 대로 공유시켜 슬데없이 new 연산자를 통한 메모리 낭비를 줄이는 방식이다. 자주 변하는 속성(외적인 속성, extrinsit)과 변하지 않는 속성(내적인 속성, intrinsit)을 분리하고 재사용하여 메모리 사용을 줄인다 Character 클래스 글자 하나를 표현한 도메인 public class Character { private char value; private String color; private String fontFamily; private int fontSize; public Character(char va..

디자인패턴 2022.08.15

긴 함수(2)

조건문 분해하기(Decompose Conditional) 여러 조건에 따라 달라지는 코드를 작성하다보면 종종 긴 함수가 만들어지는 것을 목격할 수 있다. “조건” 과 “액션” 모두 “의도”를 표현해야한다 기술적으로는 “함수 추출하기”와 동일한 리팩토링이지만 의도만 다를 뿐이다. 리팩토링 (전) private Participant findParticipant(String username, List participants) { Participant participant = null; if (participants.stream().noneMatch(p -> p.username().equals(uesrname))) { participant = new Participant(uesrname); participant..

Language/Java 2022.08.14

퍼사드 패턴(Facade Pattern)

퍼사드 패턴(Facade Pattern) 이란? 퍼사드 패턴(Facade Pattern)은 구조 패턴(Structural Pattern)의 한 종류로, 서브시스템들의 공통적인 기능을 정의하는 단순화된상위 수준의 인터페이스를 정의하는 패턴이다. 복잡한 서브 시스템 의존성을 최소화하는 방법 클라이언트가 사용해야 하는 복잡한 서브 시스템 의존성을 간단한 인터페이스로 추상화 할수 있다. 이메일 발송로직을 예로 들어봅시다. 퍼사드 패턴 사용 전 public class Client { public static void main(String[] args) { String to = "namookk@test.com"; String from = "namookk2@test.com"; String host = "127.0.0..

디자인패턴 2022.08.14

[리팩토링] 긴 함수

임시 변수를 질의 함수로 바꾸기 (Replace Parameter with Query) 함수의 매개변수 목록은 함수의 다양성을 대변하며, 짧을수록 이해하기 좋다. 어떤 한 매개변수를 다른 매개변수를 통해 알아낼 수 있다면 중복 매개변수라 생각할 수 있다. 매개변수에 값을 전달하는 것은 함수를 호출하는 쪽의 책임이다. 가능하면 함수를 호출하는 쪽의 책임을 줄이고 함수 내부에서 책임지도록 노력한다. 임시 변수를 질의 함수로 바꾸기와 함수 선언 변경하기를 통해 이 리팩토링을 적용한다. 예시 participants.forEach(p -> { long count = p.homework().values().stream() .filter(v -> v == true) .count(); double rate = coun..

Language/Java 2022.08.06

데코레이터(Decorator) 패턴

데코레이터 패턴 (Decorator Pattern) 이란? 기존에 있는 코드를 변경하지 않고 부가적인 기능을 추가하는 패턴이다. 데코레이터 사용 전 Comment 를 관리하는 CommentService 는 아래와 같으며 addComment 는 Comment 를 출력하는 메서드이다. public class CommentService { public void addComment(String comment) { System.out.println(comment); } } SpamFiltering 은 http 프로토콜을 받기 싫다면 그에 맞는 기능을 추가해야한다. 해당 기능은 아래와 같이 SpamFilteringCommentService로 구현할 수 있다 public class SpamFilteringCommen..

디자인패턴 2022.08.04

빈 생명주기 콜백

빈 생명주기 콜백이란? 스프링 프로젝트가 시작될 때 DB연결, 소켓연결, 기타 등등 시간이 걸리기에 미리 연결을 한 뒤 애플리케이션 종료시점에 연결을 종료해야하는 경우 객체의 초기화 및 종료 작업을 해야한다. 스프링 빈의 라이플 사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 →스프링 종료 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백 : 빈이 소멸되기 직전에 호출 객체의 생성과 초기화를 분리하자 생성자는 필수 정보를 받아 메모리 할당후 객체를 생성하는 책임을 가진다 그리고 초기화는 이렇게 생성된 값들을 활용해 기타 무거운 작업들을 수행한다. 그렇기에 초기화를 묶는 것은 SRP(단일 책임 원칙)적으로도 과한 책..

Spring 2022.07.30
반응형