목록분류 전체보기 (518)
개발놀이터
데코레이터 패턴은 무엇인가? 데코레이터 패턴은 주어진 상황및 용도에 따라 객체의 책임을 동적으로 추가할 수 있는 패턴을 말한다. 데코레이터 패턴은 프록시를 이용해 부가기능을 추가해주는 역할을 하는 패턴이다. 트랜잭션시작을 쉽게 해주는 @Transactional과 같은 AOP들이 데코레이터 패턴을 이용해 만든 것들이다. 데코페이터 패턴을 사용하면 기존 코드를 수정하지 않고도 행동을 확장시킬 수 있으며, 구성 및 위임을 통해 실행중인 행동을 추가할 수도 있다. 클래스의 요소들을 계속해서 수정하면서 사용하는 구조인 경우나, 일부 요소들을 조합해서 사용하는 클래스 구조인 경우에 사용하면 좋다. 데코레이터 패턴의 구조 데코레이터 패턴 예제 Component라는 인터페이스에서 런타임 의존관계를 계속해서 추가하는 방..
Q. 전략 패턴이 뭔가요? A. 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. Q. 전략 패턴을 왜 사용하나요? A. 새로운 전략을 추가하더라도 기존 코드를 변경하지 않아도 되고, 상속 대신 위임을 사용한다는 장점이 있습니다. 위임을 사용한다는 것은 상속을 강요하지 않는다는 것이고 이는 상속이 정말 필요한 곳에 쓰일 수 있다는 뜻입니다. Q. 전략 패턴을 언제 사용하나요? A. 런타임에 전략을 바꾸고 싶을 때 사용합니다. Q. 전략 패턴과 템플릿 메서드 패턴의 차이점이 뭔가요? A. 템플릿 메서드 패..
전략패턴이란 무엇인가? 전략패턴이란 객체가 할 수 있는 각각의 행위에 대해 전략클래스를 생성하고 유사한 행위들을 캡슐화하는 인터페이스를 정의하여 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 변경하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장시킬 수 있는 패턴을 말한다. 전략패턴은 변하지 않는 부분은 Context라는 곳에 두고, 변하는 부분은 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는 것이다. 전략패턴을 사용하면 전략을 추가하더라도 기존 코드를 변경하지 않아도 되고 상속대신 위임을 사용하게 된다. 위임을 사용한다는 것은 상속을 강요하지않는다는 것이고 이는 상속이 정말 필요한 곳에 사용할 수 있다는 ..
템플릿 메서드 패턴은 무엇인가? 템플릿 메서드 패턴은 특정 작업을 처리하는 일부분을 서브클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴을 말한다. 템플릿 메서드 패턴을 사용하면 중복 코드를 줄일 수 있고, 자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하게 할 수 있으며, 코드를 객체지향적으로 구성할 수 있다는 장점이 있다. 하지만 추상메서드가 많아지면서 클래스의 관리가 힘들어질 수 있고, 클래스들의 관계와 코드가 꼬일 염려가 있다는 단점이 있다. 템플릿 메서드 패턴은 클라이언트가 알고리즘의 특정 단계만 제어하고 전체 알고리즘이나 구조를 변경할 수 없도록 하고싶을 때나, 특정 단계에서 구현만 다르고 다른 대부분은 동일한 동작을 하는 경우에 사용하면 좋다...
도입 GOF 디자인 패턴 중 템플릿 메서드 패턴을 공부하던 중에 공통 로직인 AbstractTemplate를 구성하는 요소중 abstract라는 키워드를 발견하게 되었고 이에 대해 검색을 했더니 기능이 인터페이스랑 비슷한것을 발견했다. 둘의 차이점이라곤 추상클래스는 extends를 사용하는 상속이고 인터페이스는 implements를 사용한다는 것이다. 둘 다 추상메서드를 가지고 있으며 이 추상메서드를 추상클래스의 자식클래스나 인터페이스의 구현체에서 반드시 구현해야 한다는 공통점을 가지고 있었다. 이처럼 공통점을 가지고 있지만 서로 다른 역할을 할것으로 추측해서 둘의 차이점에 대해서 정리해봤다. 또한, 추상클래스와 인터페이스를 가벼운 예제코드를 통해 어느 상황에서 사용하는지 이해하는 시간도 가져볼 것이다...
Q. 템플릿 메서드 패턴이 뭔가요? A. 템플릿 메서드 패턴은 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴입니다. Q. 템플릿 메서드 패턴은 왜 사용하나요? A. 템플릿 메서드 패턴을 사용하면 중복코드를 줄일 수 있고, 자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하며 코드를 객체지향적으로 구성할 수 있다는 장점이 있습니다. 하지만 추상 메소드가 많아지면서 클래스 관리가 복잡해지고 클래스간의 관계와 코드가 꼬여버릴 염려가 있다는 단점이 있습니다. (상속을 강요한다는 단점도 있음) Q. 템플릿 메서드 패턴은 언제 사용하나요? A. 클라이언트가 알고리즘의 특정 단계만 제어하고 전체 알고리즘이나 구조를 변경할 수 없도록..
Q. 추상 클래스와 인터페이스의 차이점에 대해 설명해주세요 A. 인터페이스는 다중상속이 가능하고, 내부 인스턴스를 둘 수 없으며 필드 선언 시 public static final로 정의해야 합니다. 그 이유는 인터페이스는 그 자체로 인스턴스화 할 수 없기 때문입니다. 따라서 메모리에 할당되는 시점 즉 초기화 시점에 할당해야 하는데, 해당 방식은 static으로만 가능합니다. 추상 클래스는 다중상속이 불가능하고, 내부 인스턴스 및 필드를 자유롭게 정의할 수 있습니다. 추상 메서드가 한개이상 존재하면 되기 때문에 메서드의 일부 구현이 가능합니다. 이러한 것을 Template Method 패턴이라고 합니다. 내부 인스턴스 및 필드를 가질 수 있고 protected와 private 메서드나 필드 등을 가질 수 ..
Q. OOP가 뭐죠? A. 데이터를 객체로 취급하여 프로그램에 반영하고, 순차적으로 프로그램이 동작하는 것과는 다르게 객체의 상호작용을 통해 프로그램이 동작하는 것을 말합니다. 객체를 연결시켜 프로그래밍하면, 상속, 캡슐화, 다형성을 이용해 코드 재사용을 증가시키고, 유지보수를 감소시켜주는 장점이 있습니다.
Q. 스프링 AOP에 대해 설명해주세요 A. AOP는 관점지향 프로그래밍의 약자입니다. 기존 OOP에서 기능별로 클래스를 분리했음에도 불구하고 로깅, 트랜잭션, 자원해재와 같은 중복코드들이 발생하는 단점이 생겼습니다. 이를 해결하기 위해 개발자는 비즈니스 로직에 집중하고 비즈니스 로직과 공통관심사를 분리하여 중복코드를 제거할 수 있는 방식이 바로 AOP방식입니다.
Q. 스프링에서 트랜잭션을 왜 추상화 했나요? A. 트랜잭션을 이루는 코드들이 데이터 접근 기술에 따라 달라지는 현상이 있었습니다. 때문에 JDBC를 사용하던 애플리케이션이 JPA로 바꾸기 위해 트랜잭션을 이루는 모든 코드를 고쳐야 하는 상황이 발생했습니다. 이를 해결하고자 스프링에서는 PlatformTransactionManager라는 인터페이스로 트랜잭션을 추상화 했습니다. 이를 통해 개발자는 서비스 계층에서 특정 기술에 종속적인 트랜잭션 코드를 사용하지 않아도 됩니다. Q. @Transactional에 대해 설명해주세요 A. 스프링이 데코레이터 패턴을 이용해 만든 스프링 AOP중 하나입니다. @Transactional 어노테이션이 붙어있는 메서드에 한해서 트랜잭션 시작, 정상 로직일 때 커밋, 예외..