커맨드 패턴(Command Pattern) 커맨드 패턴은 외부에서 들어오는 요청과 요청과 관련된 정보를 독립적으로 실행할 수 있는 객체로 매개변수화합니다. 기능을 실행하는 역할인 인보커(Invoker)는 리시버(Receiver)의 요청 사항을 캡슐화한 커맨드 객체의 execute() 메소드만 호출하면 됩니다. 인보커(Invoker)는 리시버가 어떤 일을 하는지 몰라도 됩니다. 인보커가 실행해야 하는 기능이 변경되더라도 인보커의 코드를 수정할 필요 없이 인보커에 주입된 커맨드 객체만 변경하면 됩니다. 커맨드 패턴을 사용하면 요청을 대기열 큐에 넣어 지연시키거나, 로그로 기록하거나, 실행을 취소(Undo)할 수 있습니다. 인보커에서 커맨드 객체를 로딩하는 과정 1. 클라이언트(리시버)에서 요청 사항에 맞는 ..
싱글턴 패턴 싱글턴 패턴(Singleton Pattern)은 클래스 인스턴스를 단 하나만 만들고, 이 하나의 인스턴스로만 클래스에 대한 접근을 허용하는 패턴입니다. 고전적인 싱글턴 패턴 구현법 public class Singleton { // 하나뿐인 인스턴스를 저장하는 정적 변수 private static Singleton uniqueInstance; // 기타 인스턴스 변수 // 생성자를 private으로 설정 private Singleton() {} // 클래스의 인스턴스를 만들어 리턴하는 getInstance() 메소드 public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton..
팩토리 메소드 패턴(Factory Method Pattern) 부모 클래스가 객체를 생성할 때 필요한 인터페이스를 제공하지만, 실제로 어떤 클래스의 인스턴스를 생성할지는 자식 클래스가 결정하는 패턴을 말합니다. → 사용하는 자식 클래스에 따라 생성하는 인스턴스 객체를 변경할 수 있습니다. Q) 실제 객체를 생성하는 자식 클래스가 하나밖에 없는데도 굳이 팩토리 메소드 패턴을 써야할까요? 하나밖에 없더라도 제품을 생산하는 코드와 이미 만들어진 제품을 사용하는 코드를 분리할 수 있기 때문에 팩토리 메소드 패턴은 충분히 유용하다고 합니다 :) 구조 및 예시 팩토리 메소드 패턴을 사용해 책을 따라 피자 객체를 생성하는 간단한 클래스를 만들어봅시다. PizzaStore는 추상 클래스입니다. 서브클래스에서 피자 객체..
OSIV(Open Session In View) 영속성 컨텍스트를 뷰까지 열어두는 기능을 말한다. 뷰에서도 지연 로딩을 사용할 수 있어 스프링 프레임워크에서는 OSIV 사용 여부를 기본적으로 true로 설정하고 있다. JPA가 데이터베이스 커넥션을 언제 가져올까? 트랜잭션이 처음 발생할 때 데이터베이스 커넥션을 가져온다! 그렇다면 JPA는 데이터베이스 커넥션을 언제 종료할까? OSIV가 켜져 있는 경우 OSIV가 켜져있다면 Service, Repository 단에서 트랜잭션이 끝나도 영속 상태를 끝까지 유지한다. 그래서 데이터베이스 커넥션과 영속 컨텍스트는 컨트롤러 단에서 최종적으로 Response를 내보낼 때까지 살아있고 컨트롤러에서도 지연 로딩이 가능하다. 그러나 영속성 컨텍스트를 끝까지 유지한다는 ..
N+1이란? Lazy Loading을 사용할 때 일대다(OneToMany) 관계에서 흔하게 발생하는 문제로 일대다 관계가 설정된 엔티티를 조회할 때 다(N)에 해당되는 컬렉션의 데이터 개수만큼 조회 쿼리가 추가로 발생하는 상황을 말한다. 최종적으로 하나의 엔티티를 N+1번의 조회 쿼리로 읽어오면서 성능 상의 이슈가 발생한다. 예를 들어 하나의 게시물에 10개의 댓글이 달렸다고 생각해보자. 이 하나의 게시물을 읽어오는데에 게시물 조회 1번과 10개의 댓글 조회 10번, 총 11번의 조회 쿼리가 발생한다. 이 문제를 해결하기 위한 방법은 무엇이 있을까? 해결 방법 1. 엔티티 조회 방식을 최우선으로 사용하자. 1-1. Fetch Join으로 쿼리 수를 최적화한다. 먼저 ManyToOne, OneToOne 관..
풀이 열린 괄호 '(' 가 닫힌 괄호 ')' 와 한 쌍이 되면 YES, 그렇지 않다면 NO를 출력하는 전형적인 스택 문제이다. 문자열의 괄호를 관리할 스택 자료구조를 먼저 만들었다. 이제 입력받은 문자열에 for 문을 돌려보자. 1. '('를 만나면 스택에 '('를 넣는다. 2. ')'를 만나면 '('와 한 쌍을 만들어주기 위해 스택에서 '('를 꺼낸다. 2-1. 스택이 비어있다면 ')'와 한 쌍을 이루는 '('가 없다는 뜻이기 때문에 "NO"를 출력한다. 3. for 문이 끝났는데 스택이 비어있지 않다면 '('가 남는다는 뜻이기 때문에 "NO"를 출력한다. 코드 #include #include using namespace std; int T; void init() { cin.tie(0); cout.ti..
- Total
- Today
- Yesterday
- whatis
- E_FAIL
- atq
- awk프로그램
- 버추억박스오류
- linuxgedit
- 백준
- baekjoon
- virtualbox
- cron시스템
- cat
- linuxawk
- 백준27219
- Linux
- linux파일
- 코테
- 사용자ID
- OnActivityForResult
- 백준27211
- 쇼미더코드
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 리눅스cron
- api문서
- linuxtouch
- Baekjoon27219
- GithubAPI
- Baekjoon27211
- 리눅스
- GitHubAPIforJava
- 버추억박스에러
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |