분류 전체보기

OOP/Design Pattern

15. 이터레이터(iterator) 패턴

이터레이터(iterator) 패턴: 행위패턴 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체안에 들어있는 모든 항목에 접근할 수 있게 해 주는 방법을 제공해 주는 패턴 반복자 패턴이라고도 부른다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 어떤 종류의 집합체에 대해서도 사용할 수 있는 다형적인 코드를 만들수 있다. 반복자 패턴의 본질은 기반이 되는 표현을 노출시키지 않고 연속적으로 객체 요소에 접근하는 방법을 제공하는 것이다. Iterator 집합체의 요소들을 순서대로 검색하기 위한 인터페이스 정의 ConcreateIterator Iterator 인터페이스를 구현함 Aggregate 여러 요소들로 이루어져 있는 집합체 ConcreateAggregate Aggreagate ..

OOP/Design Pattern

14. 인터프리터(Interpreter) 패턴

인터프리터(Interpreter) 패턴 : 행위패턴 문법규칙을 클래스로 표현한 구조, 일련의 규칙으로 정의된 문법적 언어를 해석하는 패턴 해석자 패턴이라고도 불린다. 반복되는 문제 패턴을 언어 또는 문법으로 정의한다. 자바소스 코드를 JVM이 이해할 수 있도록 바이트 코드로 바꿔주는 자바 컴파일러와 정규 표현식이 대표적인 예시이다. Context : Expression에서 사용하는 공통된 정보가 담겨있다. 문장을 저장하고 관리하는 클래스 Expression: 표현하는 문법을 나타낸다. Context가 들어 있는 것을 볼 수 있다. TerminalExpression: 종료되는 Expression NonTerminalExpression: Expression들을 재귀적으로 참조하고 있는 Expression, ..

Spring/스프링5 프로그래밍 입문

Chapter6. 빈 라이프사이클과 범위

컨테이너 초기화와 종료 // 1. 컨테이너 초기화 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext. class); // 2. 컨테이너에서 빈 객체를 구해서 사용 Greeter g = ctx.getBean( "greeter", Greeter.class); String msg = g.greet("스프링"); System.out.println(msg); // 3. 컨테이너 종료 ctx.close(); 컨텍스트 객체 생성 시, 스프링 컨테이너 초기화. 스프링 컨테이너는 설정 클래스에서 정보를 읽어와 알맞은 빈 객체를 생성하고 각 빈을 연결(의존 주입)하는 작업을 수행 컨테이너 초기화가 완료되면 컨테..

Spring/스프링5 프로그래밍 입문

Chapter5. 컴포넌트 스캔

📌 자동 주입과 함께 사용하는 추가 기능이 컴포넌트 스캔이다. 컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있으므로 컴포넌트 스캔 기능을 사용하면 설정 코드가 크게 줄어든다. @Component 애노테이션으로 스캔 대상 지정 @Component @Component("infoPrinter") @Component 애노테이션에 값을 주었는지에 따라 빈으로 등록할 때 사용할 이름이 결정된다. 값을 주지 않을 때에는? @Component 애노테이션이 붙은 클래스 이름을 따와 빈 이름으로 사용한다. 이때 첫 글자를 소문자로 바꾼 이름을 사용한다. ex) MainClass → mainClass @ComponentS..

OOP/Design Pattern

13. 커맨드(Command) 패턴

커맨드(Command) 패턴: 행위패턴 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 디자인 패턴. 쉽게 말해 Client가 보낸 요청을 객체로 캡슐화한다는 의미이다. 이 변환은 다양한 요청들이 있는 메서드들을 인수화할 수 있도록 하며, 요청의 실행을 지연 또는 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업을 지원할 수 있다. 어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하려면 그 객체(B)를 참조하고 있어야 하는 의존성이 발생한다. 그러나 커맨드 패턴을 적용하면 의존성을 제거할 수 있다. 또한 기능이 수정되거나 변경이 일어날 때 A 클래스 코드를 수정없이 기능에 대한 클래스를 정의하면 되므로 시스템이 확장성이 있으면서 유연해진다. 발송자(Invoker) : 요청들을 시..

OOP/Design Pattern

12. 프록시(Proxy) 패턴

프록시(Proxy) 패턴: 구조패턴 프록시(Proxy)를 번역하면 대리자, 대변인의 의미를 갖고 있다. 대리자, 대변인은 누군가를 대신해서 그 역할을 수행하는 존재이다. 이는 프로그램에도 똑같이 적용된다. 즉, 프록시에게 어떤 일을 대신 시키는 것이다. 일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것(이를테면 네트워크 연결, 메모리 안의 커다란 객체, 파일, 또 복제할 수 없거나 수요가 많은 리소스)과도 인터페이스의 역할을 수행할 수 있다. 일반적으로 사용하는 프록시라는 용어와 디자인 패턴에서 말하는 프록시 패턴을 구분해야 한다. 전자는 윗 설명처럼 클라이언트와 사용 대상 사이에 대리 역할을 맡은 오브젝트를 두는 방법을 의미하지만, 후자는 프록시를 사용..

OOP/Design Pattern

11. 플라이웨이트(Flyweight) 패턴

플라이웨이트(Flyweight) 패턴: 구조패턴 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 디자인 패턴이다. 특정 클래스의 인스턴스 한 개만 가지고 여러 개의 가상 인스턴스를 제공하고 싶을 때 사용한다. 쉽게 말해 인스턴스를 가능한 대로 공유하여 메모리 낭비를 줄이는 방법이다. 중요한 점은 중복되는 객체는 공유해서 사용하자는 것! Flyweight 공유에 사용할 클래스들의 인터페이스를 선언 ConcreteFlyweight Flyweight의 구체 클래스 (실제 공유될 객체) FliweightFactory Flyweight 인스턴스를 생성 또는 공유해주는 역할 Client 플라이웨이트틀 사용하는 사용자 Weapon(Flyweight) pa..

OOP/Design Pattern

10. 퍼사드(Facade) 패턴

퍼사드(Facade) 패턴: 구조패턴 하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스, 클라스나 객체를 조합하여 더 큰 구조를 만드는 패턴 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할수 있다. 쉽게 생각하면 흩어져 있는 서브 시스템을 통합하여 퍼사드 패턴을 사용해 통합하여 보다 더 쉽게 사용할 수 있음을 의미한다. 간단한 패턴이라 실무에서 은연중에 사용해본 적이 있겠다는 생각이 들었다. 장점: 사용이 간편하고, 유연성이 좋다. 다음 예제는 넷플릭스를 보는 과정을 담았습니다. TV를 전원을 키고, 넷플릭스에 들어가 더글로리 나 피지컬100을 선택하는 과정이죠. 이거 하나하나 메서드를 호출..

Spring/스프링5 프로그래밍 입문

Chapter4. 의존 자동 주입

@Autowired 💡 @Autowired: 자동 주입 기능, 스프링이 알아서 의존 객체를 찾아 주입한다. 의존을 주입할 대상에 애노테이션을 붙이기만 하면 된다. @Autowired 애노테이션을 붙이면 설정 클래스에서 의존을 주입하지 않아도 된다. 스프링이 해당 타입의 빈 객체를 찾아서 필드에 할당한다. 일치하는 빈이 없는 경우 빈이 없는 경우 Error creating bean with name '—-'(UnsatisfiedDependencyException) 같은 에러 메시지가 나온다. 주입 대상에 일치하는 빈이 2개 이상일 경우 @Bean public MemberPrinter memberPrinter1() { return new MemberPrinter() ; } @Bean public Member..

Spring/스프링5 프로그래밍 입문

Chapter3. 스프링DI

의존이란? DI('Dependency Injection’)의 약자로 우리말로는 ‘의존 주입’ 이라고 번역한다. 이 단어를 이해하려면 ‘의존’이 뭔지 알아야 한다. 다음 코드를 살펴보자. import java.time.LocalDateTime; public class MemberRegisterService{ private MemberDao memberDao = new MemberDao(); public void regist(RegisterRequest req){ Member member = memberDao.selectByEmail(req.getEmail.()); if(member != null){ // 이메일로 회원 데이터(Member 조회); throw new DuplicateMemberExceptio..

지구우중
'분류 전체보기' 카테고리의 글 목록 (10 Page)