전체 글(101)
-
[Basic] 테스팅 프레임워크 JUnit
테스트 코드는 왜 필요한가? 우리가 DAO 를 테스트 한다고 생각해보자. DAO를 만든 뒤 바로 테스트하지 않고, 서비스 계층, MVC 프레젠테이션 계층까지 포함한 모든 입출력 기능을 만든 후, WAS를 배치한 뒤, 웹 화면을 띄워 폼을 열고, 값을 입력한 뒤 버튼을 눌러 등록해볼 것이다. 얼마나 귀찮은 짓인가? 또한 서버를 재가동 시키기 위해 지금은 작은 규모이지만 그것이 엄청나게 추가가 되어 큰 규모의 서버라고 생각해보자. 서버를 가동시킬 때도 1시간이 걸릴지도 모른다. 그것을 위해 우리는 작은 단위의 테스트를 꼭 진행해야 한다. 테스팅 프레임워크 JUnit JUnit은 말 그대로 자바로 단위 테스트를 만들 때 유용하게 쓸 수 있다. 또한 프레임워크라 main() 메소드도 필요 없고 오브젝트를 만들어..
2020.06.29 -
[Spring] 어플리케이션 컨텍스트에서 빈 생성 방법
싱글톤 레지스트리 스프링은 기본적으로 별다른 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다. 왜 스프링은 싱글톤으로 빈을 만든 것인가? 스프링은 대부분 서버환경에서 사용이된다. 그런데 매번 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서(싱글톤이 아니라 생각) 사용한다고 생각해보자. 아무리 자바의 오브젝트 생성과 가비지 컬렉션의 성능이 좋아졌다고 한들 너무 많은 요청은 서버가 감당하기 힘들 것이다. 우리가 알아야 할 것은 자바의 기본적인 싱글톤 패턴의 구현 방식의 단점이 있기 때문에, 스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공하고 그것이 바로 "싱글톤 레지스트리 "라 한다. 싱글톤 레지스트리 장점 스태틱 메소드와 Priva..
2020.06.29 -
[Spring] 스프링의 IoC & DI
IoC 란? IoC(Inversion of Contorl)은 제어의 역전이라는 개념이다. 제어의 역전이라는 건, 쉽게 말하면 프로그램의 제어 흐름 구조가 뒤바뀌는 것이다. 먼저 Servlet이라는 개념을 생각해보도록 하자. 일반적인 자바 프로그램은 main() 메소드에서 시작해서 개발자가 미리 정한 순서를 따라 오브젝트가 생성되고 실행된다. But. 서블릿을 개발해서 서버에 배포할 수는 있지만, 그 실행을 개발자가 직접 제어할 수 있는 방법은 없다. 대신 Servlet 에 대한 제어 권한을 가진 컨테이너(Container)가 적절한 시점에 서블릿 클래스의 오브젝트를 만들고 그안의 메소드를 호출한다. 위의 예시를 생각해보면 JSP, EJB처럼 컨테이너 안에서 동작하는 구조는 간단한 방식이긴 하지만 제어의 ..
2020.06.29 -
[Basic] SRP 단일 책임 원칙
SRP _ 단일 책임 원칙 하나의 모듈은 하나의, 오직 하나의 액터에 대해서만 책임져야 한다. 여기서 액터란 시스템이 동일한 방식으로 변경되기를 원하는 사용자 집단을 말한다. 즉, 액터란 하나의 사용자가 될 수 도 있고 여러 사용자가 모여서 하나의 액터가 될 수도 있다. EX) '스마트폰' 이라는 객체를 철수와 영희가 모두 사용하고 있다고 가정해보자. 철수는 스마트폰을 영상 시청을 위해서 사용하고, 영희는 스마트폰을 전화 통화를 위해서 사용 class 스마트폰 implements 동영상플레이어, 전화 { ... } 위의 스마트폰은 철수와 영희가 다른 방식으로 변경되기를 원할 수 있기 때문에 철수와 영희는 별개의 액터 철수가 만약 영상 시청을 위해서 스마트폰의 액정크기를 15인치로 바꾼다면 영희의 전화통화..
2020.06.29 -
[Basic] 객체지향 설계 원칙 (SOLID)
1. SOLID란? 이것은 객체지향 설계의 5원칙이라고 하며, 앞글자를 따서 SOLID라고 한다. 1. SRP(THhe Single Responsibility Principle) : 단일 책임 원칙 2. OCP(Open Closed Principle) : 개방 폐쇄 원칙 3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 5. DIP(Dependency Inversion Principle) : 의존 역전 원칙
2020.06.29 -
[그래프 탐색] 다익스트라 알고리즘
언제 쓰이는가? 하나의 정점에서 다른 하나의 정점까지의 최단 경로를 구하는 문제 하나의 정점에서 다른 모든 정점까지의 최단 경로를 구하는 문제 하나의 목적지로 가는 모든 최단 경로를 구하는 문제 모든 최단 경로를 구하는 문제 다익스트라 알고리즘 동작 원리 다익스트라 알고리즘의 기본 로직은, 첫 정점을 기준으로 연결되어있는 정점들을 추가해가면서 최단거리를 갱신하는 것이다. 정점을 잇기 전까지는 시작점을 제외한 정점들은 모두 무한대 값을 가진다. 다음과 같은 그래프가 있고, 여기서 시작점은 5번의 정점이라고 생각을 해보자. 우선순위 큐에 모든 정점들을 넣어준다. Priority Queue인덱스최단 거리50 Distance543210INFINFINFINF 큐에서 가장 위에 있는 값을 꺼내면, 인덱스는 5이고 ..
2020.06.27