전체 글

OOP/Design Pattern

20. 전략(Strategy) 패턴

전략(Strategy) 패턴: 행위패턴 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 패턴 필요에 따라 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시켜, 전략 클래스를 만들어(캡슐화), 이를 필요에 따라 동적으로 바꿔서 사용할 수 있게 하는 디자인 패턴이다. 여기서 알고리즘이 뜻하는 바는 독립적인 책임으로 분리가 가능한 기능을 말한다. 이를 대체 가능한 전략이라고 보기 때문에 패턴 이름이 전략패턴이다. 전략패턴은 디자인의 꽃이라 불릴만큼 중요한 패턴이다. Context: Strategy의 메소드를 호..

CodeStates

[SEB BE 44] Section 1 후기

코드스테이츠 백엔드 과정 Section 1 후기 나: Section1 끝났당 ~~ ?? : 내일부터 알고리즘 파트 Section2 시작입니다. section 1에 대한 내용을 시작하기 앞서 내가 느꼈던 코드스테이츠에 대한 얘기부터 해볼까 한다. 코드스테이츠의 교육방식 커리큘럼은 만족스러울 정도로 잘 짜여있다. 때문에 컨텐츠가 흘러가는 그 플로우가 마음에 들었다. 섹션안에 여러 유닛으로 나뉘어져 있는데 그 유닛별로 강의를 제공하는 것이 아닌 텍스트 자료를 제공해준다. 개인 취향이겠지만, 난 이 텍스트 자료가 인터넷 강의보다 더 좋았다. 강의는 배속을 돌리든 넘겨보든 시간이 걸리기 마련인데, 텍스트 자료는 강의에 비해 시간소모가 더 적으니까.. 모르는 부분이 있으면 반복해서 읽으면 되고, 자세히 알고싶으면 ..

OOP/Design Pattern

19. 스테이트(State) 패턴

스테이트(State) 패턴: 행위패턴 객체가 상태에 따라 행위를 다르게 할 때, 직접 상태를 체크하여 상태에 따른 행위를 호출하는 것이 아니라 상태를 객체화하여 필요에 따라 다르게 행동하도록 위임하는 디자인 패턴 객체의 상태에 따라 조건문을 사용할 때, 스테이트 패턴을 적용해 볼 수 있다. 가령 사람이 가만히 서 있는 상태와 앉아 있는 상태, 걷는 상태가 있다고 했을 때, 사람 객체에 state 필드를 만들어 상태를 확인하는 것이 아닌, 이 상태들을 모두 객체화하는 것이다. 외부로부터 캡슐화하기 위해 state 인터페이스를 만들고 각 상태를 구현한다. PersonState(state 인터페이스) package behavioral.state; public interface PersonState { publ..

Algorithm/알고리즘 개념

[알고리즘] 01. 비트마스크(Bit mask)

💡비트마스크: 알고리즘보다는 기법이나 테크닉에 가깝다. 자료구조를 사용해야하는 상황에서 이진수를 이용하여 빠르게 연산하는 기법이라 말할 수 있다. 비트 마스크를 알기 전에 비트가 무엇인지 부터 알아야 한다. 비트(Bit) 💡비트(Binary Digit, Bit): 데이터들을 나타내는 최소 단위, 이진수로 표현한다.(0과 1) 비트 연산자 구분 연산자 의미 설명 예시(a=1001, b= 1100) 비트연산자 & 비트 단위 AND 양쪽 비트가 모두 1이면 결과도 1이고 나머지는 0을 반환한다. a&b = 1000 | 비트 단위 OR 양쪽 비트 중 하나라도 1이면 1을 반환, 나머지는 0을 반환한다. a|b = 1101 ^ XOR(배타적 OR) 양쪽 비트가 서로 다르면 1, 같은면 0을 반환한다. a^b = ..

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

Chapter8. DB연동

JDBC란? 💡 JDBC: DB에 접근할수 있도록 Java에서 제공하는 API (Java Database Connectivity) Spring JDBC 💡Spring JDBC: JDBC의 단점을 보완하여 더 편리한 기능을 제공 Connection 열기와 닫기 Statement 준비와 닫기 Statement 실행 ResultSet Loop처리 Exception 처리와 반환 Transaction 처리 JDBC 프로그래밍의 단점을 보완하는 스프링 구조적인 반복을 줄이기 위한 방법은 템플릿 메서드 패턴과 전략 패턴을 함께 사용하는 것이다. 스프링은 바로 이 두 패턴을 엮은 JdbcTemplate 클래스를 제공한다. 💡 JDBC Template: Spring JDBC접근 방법중 하나로, 내부적으로 Plain JD..

OOP/Design Pattern

18. 옵저버(Observer) 패턴

옵저버(Observer) 패턴: 행위패턴 클래스 간의 복잡한 관계들을 캡슐화하여 하나의 클래스에서 관리하도록 처리하는 패턴, 일대다(one-to-many) 의존성을 정의한다. 어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인 패턴이 옵저버 패턴이라고 할 수 있다. 실시간으로 한 객체의 변경사항을 다른 객체에 전파할 수 있으며, 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있다. 하지만 너무 많이 사용하게 되면, 상태 관리가 힘들 수 있다. 또 데이터 배분에 문제가 생기면 큰 문제로 이어질 수 있다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 쉽게 말해 subject에 observer을 등록하여 정보를 받는(notify) 패턴. Subject : Ob..

OOP/Design Pattern

17. 메멘토(Memento) 패턴

메멘토(Memento) 패턴: 행위패턴 객체의 상태 정보를 저장하고 사용자의 필요에 의하여 원하는 시점의 데이터를 복원 할 수 있는 패턴 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴. 포토샵 되돌리기나 뒤로가기를 떠올리면 이해가 쉬울 것이다. Originator : 현재 상태를 표현하는 State를 가지고 있으며, Memento 객체를 통해 현재 상태를 변경 Memento : Originator의 상태를 나타내는 클래스, Memento를 이용하여 Originator의 상태를 변경 ​CareTaker : Memento를 순서대로 저장하여 관리하는 클래스, Stack이나 List 같은 자료구조를 사용해도 무방 PhotoSha..

CodeStates

Section1-6. 객체 지향 프로그래밍이란?

* 주관적인 생각이 포함된 글입니다. 코드스테이츠에서 배우는 내용은 개인적으로 노션으로 따로 정리하고 있었지만, 티스토리 블로그에는 섹션별 회고식으로 글을 올릴 생각이었기 때문에 굳이 올리지 않았다. 그러나 지금 이 글을 올리는 이유는?? OOP의 개념은 자바와 스프링을 하는데 있어 중요하다 생각하여 리마인드도 할겸 코드스테이츠에서 배운 내용 + 내가 알고 있는 지식까지 도합하여 다시 정리하려 한다. 아마 이후에 배우는 내용 중 또 내가 중요하다 생각하는 콘텐츠가 있다면 회고 작성할 때 말고도 이 카테고리를 계속 방문할 것 같다... 그래서 객체란? "모든 실재하는 어떤 대상" 이때 크게 오해할 점은 모든 실재하는 어떤 대상이라하여 우리가 보고 느낄 수 있는 우산, 컴퓨터, 핸드폰과 같은 대상으로 생각할..

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

Chapter7. AOP 프로그래밍

뒤에서 설명할 트랜잭션의 처리 방식을 이해하려면 AOP(Aspect Oriented Programming)를 알아야 한다. 프로젝트 준비 aspectjweaver 의존 추가 build.gradle에 추가 implementation group: 'org.aspectj', name: 'aspectjweaver', version: '1.8.13' 스프링의 AOP 기능은 spring—aop 모듈이 제공하는데 spring—context 모듈을 의존 대상에 추가하면 spring-aop 모듈도 함께 의존 대상에 포함된다. 따라서 spring—aop 모듈에 대한 의존을 따로 추가하지 않아도 된다. aspectjweaver 모듈은 AOP를 설정하는데 필요한 애노테이션을 제공하므로 이 의존을 추가해야 한다. 프록시와 AO..

OOP/Design Pattern

16. 중재자(Mediator) 패턴

중재자(Mediator) 패턴: 행위패턴 클래스 간의 복잡한 관계들을 캡슐화하여 하나의 클래스에서 관리하도록 처리하는 패턴 중재자 패턴을 사용하면 객체 간 통신은 중재자 객체 안에 함축된다. 객체들은 더 이상 다른 객체와 서로 직접 통신하지 않으며 대신 중재자를 통해 통신한다. 이를 통해 통신 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킨다. M:N 관계를 해당 패턴을 사용하면 M:1 관계로 만들어 복잡도를 내리므로 유지 보수 및 확장성에 유리하다. 느슨한 결합(loose coupling)을 유지할 수 있고 전체적인 흐름을 읽기 편해진다. Mediator: 객체 간의 상호참조를 위한 인터페이스. Colleague: 다른 Colleague와의 상호참조를 위한 인터페이스. ConcreteMediato..

지구우중
개발 메모용 블로그