전체 글 555

템플릿 메서드 패턴

템플릿 메서드 패턴은 무엇인가? 템플릿 메서드 패턴은 특정 작업을 처리하는 일부분을 서브클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴을 말한다. 템플릿 메서드 패턴을 사용하면 중복 코드를 줄일 수 있고, 자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하게 할 수 있으며, 코드를 객체지향적으로 구성할 수 있다는 장점이 있다. 하지만 추상메서드가 많아지면서 클래스의 관리가 힘들어질 수 있고, 클래스들의 관계와 코드가 꼬일 염려가 있다는 단점이 있다. 템플릿 메서드 패턴은 클라이언트가 알고리즘의 특정 단계만 제어하고 전체 알고리즘이나 구조를 변경할 수 없도록 하고싶을 때나, 특정 단계에서 구현만 다르고 다른 대부분은 동일한 동작을 하는 경우에 사용하면 좋다...

추상클래스와 인터페이스

도입 GOF 디자인 패턴 중 템플릿 메서드 패턴을 공부하던 중에 공통 로직인 AbstractTemplate를 구성하는 요소중 abstract라는 키워드를 발견하게 되었고 이에 대해 검색을 했더니 기능이 인터페이스랑 비슷한것을 발견했다. 둘의 차이점이라곤 추상클래스는 extends를 사용하는 상속이고 인터페이스는 implements를 사용한다는 것이다. 둘 다 추상메서드를 가지고 있으며 이 추상메서드를 추상클래스의 자식클래스나 인터페이스의 구현체에서 반드시 구현해야 한다는 공통점을 가지고 있었다. 이처럼 공통점을 가지고 있지만 서로 다른 역할을 할것으로 추측해서 둘의 차이점에 대해서 정리해봤다. 또한, 추상클래스와 인터페이스를 가벼운 예제코드를 통해 어느 상황에서 사용하는지 이해하는 시간도 가져볼 것이다...

Java 2022.07.05

면접 준비 : 템플릿 메서드 패턴

Q. 템플릿 메서드 패턴이 뭔가요? A. 템플릿 메서드 패턴은 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴입니다. Q. 템플릿 메서드 패턴은 왜 사용하나요? A. 템플릿 메서드 패턴을 사용하면 중복코드를 줄일 수 있고, 자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하며 코드를 객체지향적으로 구성할 수 있다는 장점이 있습니다. 하지만 추상 메소드가 많아지면서 클래스 관리가 복잡해지고 클래스간의 관계와 코드가 꼬여버릴 염려가 있다는 단점이 있습니다. (상속을 강요한다는 단점도 있음) Q. 템플릿 메서드 패턴은 언제 사용하나요? A. 클라이언트가 알고리즘의 특정 단계만 제어하고 전체 알고리즘이나 구조를 변경할 수 없도록..

면접 준비 : 추상클래스와 인터페이스

Q. 추상 클래스와 인터페이스의 차이점에 대해 설명해주세요 A. 인터페이스는 다중상속이 가능하고, 내부 인스턴스를 둘 수 없으며 필드 선언 시 public static final로 정의해야 합니다. 그 이유는 인터페이스는 그 자체로 인스턴스화 할 수 없기 때문입니다. 따라서 메모리에 할당되는 시점 즉 초기화 시점에 할당해야 하는데, 해당 방식은 static으로만 가능합니다. 추상 클래스는 다중상속이 불가능하고, 내부 인스턴스 및 필드를 자유롭게 정의할 수 있습니다. 추상 메서드가 한개이상 존재하면 되기 때문에 메서드의 일부 구현이 가능합니다. 이러한 것을 Template Method 패턴이라고 합니다. 내부 인스턴스 및 필드를 가질 수 있고 protected와 private 메서드나 필드 등을 가질 수 ..

면접 준비 : 스프링 AOP

Q. 스프링 AOP에 대해 설명해주세요 A. AOP는 관점지향 프로그래밍의 약자입니다. 기존 OOP에서 기능별로 클래스를 분리했음에도 불구하고 로깅, 트랜잭션, 자원해재와 같은 중복코드들이 발생하는 단점이 생겼습니다. 이를 해결하기 위해 개발자는 비즈니스 로직에 집중하고 비즈니스 로직과 공통관심사를 분리하여 중복코드를 제거할 수 있는 방식이 바로 AOP방식입니다.

면접 준비 : 트랜잭션

Q. 스프링에서 트랜잭션을 왜 추상화 했나요? A. 트랜잭션을 이루는 코드들이 데이터 접근 기술에 따라 달라지는 현상이 있었습니다. 때문에 JDBC를 사용하던 애플리케이션이 JPA로 바꾸기 위해 트랜잭션을 이루는 모든 코드를 고쳐야 하는 상황이 발생했습니다. 이를 해결하고자 스프링에서는 PlatformTransactionManager라는 인터페이스로 트랜잭션을 추상화 했습니다. 이를 통해 개발자는 서비스 계층에서 특정 기술에 종속적인 트랜잭션 코드를 사용하지 않아도 됩니다. Q. @Transactional에 대해 설명해주세요 A. 스프링이 데코레이터 패턴을 이용해 만든 스프링 AOP중 하나입니다. @Transactional 어노테이션이 붙어있는 메서드에 한해서 트랜잭션 시작, 정상 로직일 때 커밋, 예외..

트랜잭션과 @Transactional

*트랜잭션 트랜잭션은 더 이상 쪼갤 수 없는 작업의 최소 단위를 의미한다. 즉 여러 작업을 진행하다가 문제가 생겼을 경우 롤백하기 위해 트랜잭션을 다누이로서 사용할 수 있다. 트랜잭션에는 commit, rollback 두 가지 경우가 존재한다. 모두 성공하여 commit되거나 하나라도 실패하면 rollback되는 것이다. Spring에서 제공하는 Transaction 기능 1. 트랜잭션 동기화 2. 트랜잭션 추상화 3. 트랜잭션 분리 1. 트랜잭션 동기화 개발자들이 JDBC의 모든 커넥션을 하나의 트랜잭션으로 관리하기 위한 작업을 직접 수행한다면 매우 번거로울 것이다. Spring에서는 이러한 문제를 해결하고자 트랜잭션 동기화 기술을 지원한다. 즉, 트랜잭션을 시작하기 위한 자원을 특별한 저장소에 보관해..

Spring/Spring 2022.06.21

커넥션 풀 (Connection pool)

*커넥션 풀 커넥션을 하는데 많은 소스가 들어간다. 1. 애플리케이션 로직이 디비 드라이버에 커넥션을 조회한다. 2. TCP/IP 커넥션 연결 3. ID, PW 부가정보 전달 4. DB내부 인증 + DB 세션 생성 5. 커넥션 생성 완료 6. 애플리케이션 로직에 커넥션 반환 근데 데이터베이스에 접근할 때마다 커넥션 객체를 만들면 메모리 누수, 시간 낭비 심함 그래서 대안이 커넥션 객체를 여러개 만들어 둔다. -애플리케이션 로직이 디비에 커넥션 객체를 요청할 때 디비 드라이버가 커넥션을 만드는것이 아니라 이미 만들어진 커넥션 풀에서 꺼내 쓰게 된다. 근데 커넥션 객체를 여러개 만들기 위해서 커넥션 풀이란걸 만들게 되는데 각각의 커넥션 풀을 구현해놓은 것들 마다 사용법이 조금씩 다른 현상이 생겼다. 그래서 ..

Spring/Spring 2022.06.21

QueryDSL 중급문법

이 포스팅은 인프런 김영한 님의 실전! Querydsl 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요 프로젝션과 결과 반환 - 기본 프로젝션이란 뭘까? 그냥 간단하게 select 대상으로 지정된 것을 말한다. 크게 봤을 때 프로젝션이 한개일 때와 여러개일 때로 나눠볼 수 있다. 프로젝션 대상이 하나일 때 @Test public void simpleProjection() { List result = queryFactory .select(member.username) .from(member) .fetch(); for (String s : result) { System.out.println("s = " + s); } } select문에 member.username하나만 있는 상황이다. 이럴..

JPA/QueryDSL 2022.02.07