공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지 153

[Design Pattern] Observer

Observer 패턴 한 객체의 상태가 바뀌면, 해당 객체에 의존하는 다른 모든 객체에게 notice 전송 + 자동으로 내용이 갱신되는 one to many 방식의 의존성을 정의한 객체. Subject 객체의 bCheck 변수 - 해당 객체가 변경되었는지 여부를 알리는 boolean. bCheck가 false이면, Subject 객체에 의존하는 Observer 객체에게 값 변경이 있음을 알린다. Observer 객체는 update() 메소드로 Subject값이 어떻게 변경되었는지 확인하고, 변경된 값에 대응되는 메소드를 실행한다. 자바의 Observer 내장패턴 사용하기 Push방식, Pull방식 모두 사용가능함. java.util.Observer 인터페이스 구현 후 Observable 객체의 addOb..

[Design Pattern] Builder

Builder 패턴 객체 생성 시 흔히 사용되는 패턴. Dot chain 문법이라고도 부른다. 빌더 패턴을 다루는 두 가지 설명 GoF Design Pattern: 객체의 생성 / 조립 방법을 분리할 목적 Effective Java의 builder Pattern GoF의 패턴보다는 좀 더 코딩위주의 활용법. 코드 가독성 / 유지보수성을 위해 빌더 패턴을 권장함 객체 일관성, 불변성 (변경불가능) 등의 특징을 강조 규칙, 생성자 인자가 많을 경우 builder 패턴을 권장하는 편. effecitve java의 builder pattern은 깔끔하고 유연하게 객체를 생성하기 위한 기법. @Getter @Setter @AllArgsConstructor // 생성자에서 특정 필드만 제거한 채 구현하려면, 그만큼..

[Design Pattern] FlyWeight

FlyWeight 패턴 생성 비용이 큰 객체를 공통으로 사용할 수 있도록 만드는 패턴. 중복 생성될 가능성이 높은 객체 동일한 리소스가 자주 사용될 가능성이 높다는 의미이므로, 공통자원 형태로 관리하는 편이 효율적이다 생성비용은 크지만 사용빈도는 낮은 객체 이런 경우 매리 객체를 생성해두는 건 낭비. 요청이 있을 때에만 생성해서 제공한다. FlyWeight 패턴은 위 두 가지 목적을 위해 존재함. 객체 생성을 담당하는 Factory 역할과 객체 관리 역할을 분리하는 편이 유용한 경우도 있으나, 일반적으로는 역할의 크기가 크게 다르지 않으므로 하나의 클래스 안에 있어도 무방하다. 장점 많은 객체를 생성할 때 생성시간 / 메모리소모를 줄일 수 있음 state pattern과 결합이 용이함 단점 개별 설정이 ..

[Design Pattern] Singleton

SingleTon 객체가 많아지면 리소스 사용이 많아지고, 리소스가 많으면 프로그램 전체 속도가 떨어진다. -> 생성할 수 있는 객체의 최대 개수를 제한할 필요가 생김 Singleton 패턴: 객체 생성을 단 한번만 허용하는 패턴. 객체의 생성개수 제한이라는 조건이, 객체를 활용하려는 쪽에서 일일이 신경쓰지 않아도 되도록 하는 게 핵심. 용례 DB Connection Pool Log Writer ... @Getter public class Database { private static Database singleton; private String name; // getInstance()로 객체 불러오기. // 객체가 없을 경우 singleton 변수에 새 인스턴스를 할당하고, // 있으면 해당 객체를 그..

OAuth 정리

OAuth 데이터를 간편하고 안전하게 주고받기 위한 표준. ID와 비밀번호 대신 Access Token으로 사용자를 식별한다. 토큰은 API를 제공하는 리소스 서버만 발급할 수 있으며, 일정시간이 지나면 폐기할 수 있다. 토큰마다 필요한 권한만 부여할 수 있으므로, 서버가 클라이언트의 접근권한을 쉽게 제어할 수 있다. ex) 페이스북 API를 사용하는 모바일 앱의 경우 Read Only 권한을 지닌 Access Token을 생성할 수 있다. 모바일 앱이 페이스북 인증을 지원할 때 이 토큰만 발급받는다면, 해당 모바일 앱 사용자는 페이스북에 글을 게시할 수 없다. 사용자 ID와 비밀번호가 필요하지 않다. 페이스북 페이지에서 로그인하면, 페이스북 측에서 해당 모바일 앱에 사용자가 승인한 권한만 있는 토큰을 ..

Spring AOP 요약

www.inflearn.com/course/spring-framework_core# 스프링 프레임워크 핵심 기술 - 인프런 이번 강좌는 스프링 부트를 사용하며 스프링 핵심 기술을 학습합니다 따라서 스프링 부트 기반의 프로젝트를 사용하고 있는 개발자 또는 학생에게 유용한 스프링 강좌입니다. 중급이상 웹 개발 www.inflearn.com Spring 핵심기술의 AOP 부분 정리. Spring AOP 스프링 AOP 구현체 제공, 자바에서 제공하는 구현체 (aspect-j) 와 연동. 스프링 txn, 캐시 등 여러 기능에 적용됨 흩어진 Aspect를 모듈화할 수 있는 프로그래밍 기법을 의미함. OOP의 보완관계. 여러 클래스에 걸쳐서 비슷한 코드를 사용해야 하는 경우 Transaction 처리. setAuto..

HTTP

목차 HTTP 특징 구조 메소드 URL과 URI HTTP 버전별 특징 nginx와 apache HTTP 서버와 클라이언트가 텍스트, 이미지, 동영상 등의 데이터를 주고받을 때 사용하는 프로토콜. 기본적으로 텍스트를 전송한다. 특징 TCP/IP 기반으로 한 지점에서 다른 지점으로 요청을 보내고 받음. 무상태성 (Stateless) 클라이언트와 서버가 각각 HTTP로 통신할 때, 상대방의 State를 기억하거나 저장하지 않는다. 비연결성 (Connectionless) 요청을 받은 서버가 응답을 마치면, 소켓을 유지하지 않고 연결을 끊는다. 요청에는 반드시 응답이 일대일로 대응된다. 서버가 응답을 보내더라도, 클라이언트가 받지 못할 수 있으므로 클라이언트가 각 상황별 대응을 결정해야 함 클라이언트는 일정 시간..

Java8 Stream - Optional - Date 정리

인프런 '더 자바- 자바8' 백기선님 강의내용 정리 Stream 정의: 연속된 데이터를 처리하는 Operation 모음. Collection이 데이터를 모아놓은 자료구조라면, Stream은 이걸 토대로 데이터를 원하는 방식으로 처리하는 것. 따라서 데이터 저장소의 개념이 아니다. 특징 Function in Nature. 원본 데이터를 변경하지 않는다. Stream stringStream = names.stream().map(String::toUpperCase); Stream으로 어떤 연산을 수행한 결과는 stream 객체이고, 원본은 바뀌지 않는다. 스트림으로 들어온 데이터는 한 번만 처리 (반복문 개념이 아님) seamless하게 들어오는 데이터 처리 가능. (무제한으로 데이터가 들어오면, 무한히 처리..

Java Reflection 정리

인프런 '더 자바 - 코드를 조작하는 다양한 방법' 백기선님 강의내용 정리 Reflection 코드를 조작하는 다양한 방법 중 하나. 정의된 클래스 / 메소드 / annotation 정보를 확인하고 참조하기 인스턴스를 생성하고, 필드값을 변경하며, 메소드를 실행할 수 있는 방법. 스프링부트 프로젝트 생성. dependency에 스프링 웹 추가. BookService와 BookRepository라는 두 개의 컴포넌트를 생성하고, BookService에 Autowired로 BookRepository를 추가한 뒤 BookServiceTest 코드를 아래처럼 작성한다. package com.inspirit941.thejavaspringreflection; import org.junit.jupite..

Java Concurrent Programming - Executors, Callable, Future, CompletableFuture

백기선님의 인프런 더 자바8 강의 내용 정리. Concurrent Programming 이전까지의 자바 Concurrent Programming을 알아야 한다. 자바의 기본 Concurrent Programming Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 SW 자바에서는 멀티프로세싱, 멀티쓰레드 둘 다 가능하다. 이 중 멀티쓰레드를 다룸. package com.inspirit941.java8to11; public class testConcurrentProgramming { static class MyThead extends Thread { @Override public void run() { System.out.println("Thread: " + Thread.currentThrea..