분류 전체보기 135

[Design Pattern] Strategy Pattern 전략패턴은 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴입니다. 기존의 코드 변경 없이 행위를 자유롭게 바꿀 수 있게 해주는 OCP를 준수한 디자인 패턴 방법을 말합니다. 전략패턴은 컴포지션 관계(has-a)를 가집니다. 컴포지션은 해당 인스턴스의 내부 구현이 바뀌더라도 영향을 받지 않습니다. 또 인터페이스를 활용하여 다른 인스턴스를 쉽게 변경할 수 있습니다. Context 스트래티지 패턴을 이용하는 역할을 수행합니다. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 생성자 또는 Setter를 제공합니다. public class Context { private Strategy strategy; public void setTranslateStrategy(Strategy .. Computer Science/Design Pattern 2021. 8. 3.
[Algorithm] BOJ 1158 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Queue queue = new LinkedList(); StringBuffer sb = new StringBuffer(); int n = sc.nextInt(); int k = sc.nextInt(); for (int i = 1; i Algorithm 2021. 7. 28.
[Algorithm] BOJ 1260 import java.util.*; public class Main { public static boolean[] dfsVisited; public static boolean[] bfsVisited; public static ArrayList graph = new ArrayList(); public static void dfs(int start) { dfsVisited[start] = true; System.out.print(start + " "); for (int i = 0; i < graph.get(start).size(); i++) { int x = graph.get(start).get(i); if (!dfsVisited[x]) dfs(x); } } public static void bfs(int .. Algorithm 2021. 7. 28.
[Spring] Bean ( Spring Bean ) Bean Spring에서는 Container를 이용해 객체들을 관리합니다. 이때 Container가 관리하는 자바 객체를 Bean이라고 부릅니다. 흔히 알고 있는 new를 통해 생성된 객체는 Bean이라고 할 수 없습니다. Bean은 getBean()을 통해 얻어질 수 있는 것을 Bean이라고 합니다. Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미합니다. Spring에서 Bean을 등록하는 방법은 ComponentScan 방법과, Configuration에서 직접 등록하는 방법이 존재합니다. 스프링은 기본적으로 모든 Bean을 Singleton으로 생성하여 관리합니다. Bean은 다양한 Scope를.. Domain/Spring 2021. 7. 23.
[Spring] 템플릿-콜백 Spring은 DB 연결과 관련된 상황에서 예외처리에 대한 상황에서 심각한 문제점을 가지고 있었습니다. JDBC 코드의 흐름을 따르지 않고 중간에 어떤 이유로든 예외가 발생했을 경우에도 사용한 리소스를 반드시 반환하도록 만들어야 하기 때문입니다. 그렇지 않으면 시스템에 심각한 문제를 일으킬 수 있습니다. 이러한 부분을 해결하기 위해 사용하는 것이 JdbcTemplate입니다. JdbcTemplate는 스프링이 제공하는 템플릿-콜백 기술입니다. 기본적으로 Spring에서는 DB에 접근할 때, Connection과 PreparedStatement 두개의 공유 리소스를 이용하여 처리를 하게 됩니다. 이때, 사용을 마친 후에 close()를 통해 접속을 끊어주어야 합니다. public void sample(St.. Domain/Spring 2021. 7. 23.
[Spring] 관점 지향 프로그래밍 (AOP / Aspect Oriented Programming) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불립니다. 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 공통적인 관점으로 나누고 그 관점을 기준으로 각각 모듈화하겠다는 것입니다. 쉽게 말하자면 흩어져 있는 코드를 한 곳으로 모으는 것 입니다. 그림으로 설명하자면 아래와 같이 Controller, Service, Repository에 모두 시간 측정 로직이 존재할 경우 AOP를 활용하여 공통의 관심사항을 적용할 수 있습니다. AOP 적용 전 @Transactional @Service public class MemberService { /** * 회원가입 */ public Long join(Member member) { long start = System... Domain/Spring 2021. 7. 14.
[Spring] 제어의 역전(IoC / Inversion of Control)과 의존성 주입(DI / Dependency Injection) 제어의 역전(Inversion of Control)과 의존성 주입(Dependency Injection)은 스프링이 가장 기본이 되는 기술이자 스프링의 핵심 개발 원칙이기도 합니다. 의존성 주입(Dependency Injection) 의존성이란 대표적으로 new 키워드를 통해 객체를 참조하거나, 다른 클래스 타입의 리턴값을 가지거나, 클래스의 상속, 인터페이스의 구현이 있습니다. 일반적으로는 의존성에 대한 제어권을 개발자 직접 만들게 됩니다. 하나의 객체가 다른 객체의 의존성을 제공하는 기술을 의존성 주입(Dependency Injection)이라고 합니다. class User { private Champion champion; User(Champion champion) { this.champion = .. Domain/Spring 2021. 7. 14.
[Spring] 컨테이너( Container / IoC Container / BeanFactory / ApplicationContext ) Container는 Spring의 핵심입니다. Container는 개발자를 대신하여, Bean의 생명주기를 담당합니다. Container가 Bean을 관리해주기 때문에, 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로워 졌습니다. 이렇게 개발자가 할 일을 Container가 대신해주는 것을 IoC(Inversion of Control)이라고 합니다. Container는 스프링의 핵심인 IoC가 가능하도록 해주는 역할을 합니다. Container는 필요로 하는 자원을 런타임에 전달하는데, 이것을 Dependency Injection이라고 부릅니다. IoC와 DI는 Spring에서 핵심적인 부분이기 때문에 이러한 부분을 자동으로 관리해주는 Container 또한 Spring에서 핵심적인.. Domain/Spring 2021. 7. 13.
[Spring] POJO ( Spring POJO / Spring Triangle / Plain Old Java Object ) 스프링 핵심 개발자들은 “스프링의 정수는 엔터프라이즈 서비스 기능을 POJO에 제공하는 것”이라고 했습니다. 분리됐지만 반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공한다’는 것이 스프링의 가장 강력한 특징과 목표입니다. 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정의해놓은 설계정보로 구분됩니다. 스프링의 주요 기술인 IoC/DI. AOP와 PSA는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능기술이 라고 불립니다. POJO란? POJO는 Plain Old Java Ojbect를 의미합니다. POJO는 자바의 단순한 오브젝트라고 할 수 있습니다. 진정한 POJO의 의미는.. Domain/Spring 2021. 7. 13.
[Spring] 스프링이란? (Spring / Spring Boot / Spring Framework ) 스프링에 대해 가장 잘 알려진 정의는 '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크'입니다. 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말합니다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는 데 일차적인 목표를 두는 프레임워크입니다. 엔터프라이즈 개발을 편하게 하려는 이유는 원래 엔터프라이즈 개발이란 편하지 않기 때문입니다. 자바 엔터프라이즈 시스템 개발이 어려운(편하지 않은) 가장 큰 이유는 근본적인 비즈니스 로직과 엔터프라이즈 기술이라는 두 가지 복잡함이 얽혀 있기 때문입니다. 침투적 vs 비침투적 침투적인(invasive) 기술 : .. Domain/Spring 2021. 7. 13.