Java

    web.xml 파일이란? 그리고 web.xml 파일의 역할

    web.xml 파일이란? 자바 웹 애플리케이션을 위한 배포 디스크립터 (deployment descriptor) 이다. WEB-INF 디렉토리 내부에 위치한다. 배포 디스크립터란 구성 정보 파일을 말한다. 애플리케이션에 의해 사용되어 배포 도구 혹은 런타임에 정보를 제공한다. 애플리케이션의 servlets, filters 그리고 그 외 컴포넌트들을 구성하는 것을 도와준다. 정리하자면, 웹 컨테이너(Tomcat)에 구성 정보 (configuration information)를 제공해준다. web.xml 을 통해 제공할 수 있는 구성 정보들 자바 웹 애플리케이션에 대표적으로 아래와 같은 구성정보를 제공해줄 수 있다. 서블릿 매핑 보안 제약 에러 페이지 초기화 파라미터 필터 세션 구성 마임 타입 매핑 서블릿 ..

    자바 서블릿(Servlet) 이란?

    서블릿이란? 서블릿은 자바 웹 서버의 기능을 확장한다. 자바 웹 앱에서 클라이언트 요청을 다루기 위해 사용되는 자바 클래스이다. 서블릿은 동적 웹페이지 생성, 유저의 입력 처리, DB 혹은 다른 백엔드 서비스와의 커뮤니케이션 등에 사용된다. 왜 서블릿이란 이름을 가지게 되었는가? "server" 와 "applet" 이라는 이름이 합쳐졌다. "server" 는 클라이언트의 요청에 응답하는 프로그램을 말한다. "applet" 은 커다란 프로그램 안에서 세부적인 작업을 하는 작은 프로그램을 말한다. 서블릿은 어떻게 생성되는가? Java Servlet API 를 통해 구현된다. 공식문서 를 확인하여 어떠한 API 가 존재하는지 확인할 수 있다. 제공하는 인터페이스와 클래스들을 이용해 서블릿의 동작을 정의할 수 ..

    WEB-INF 디렉토리란?

    WEB-INF 디렉토리란 무엇인가? 자바 웹 애플리케이션에서 특수한 역할을 담당하는 디렉토리이다. 보통 웹 애플리케이션 루트 디렉토리에 위치한다. 애플리케이션 내부적으로 쓰는 파일이 존재하는 디렉토리로 클라이언트 접근이 불가능해야 한다. 몇개의 서브 디렉토리와 파일을 갖는다. WEB-INF/classes: 컴파일된 자바 클래스 파일들을 보관. WEB-INF/lib: 서드파티 라이브러리들을 보관. WEB-INF/web.xml: 구성정보 파일이다. 절대 클라이언트가 접근 가능한 위치에 두면 안된다. 서블릿, JSP 페이지와 같은 웹 애플리케이션 컴포넌트만 접근이 가능해야 한다.

    데코레이터 패턴 (Decorator Pattern) 이란?

    데코레이터 패턴 (Decorator Pattern) 이란?

    데코레이터 패턴 (Decorator pattern) 래퍼 객체를 이용해 모듈과 비슷한 방식으로 기존 객체에 기능을 추가할 수 있다. 기존 기능에 영향을 주지 않고 가능하다. 런타임에 객체에 '행위' 혹은 '기능'을 추가할 수 있게 해준다. 기존 객체를 '행위'를 가진 특별한 래퍼 객체 (데코레이터)에 넣어서 객체가 그 '행위'를 할 수 있게 만든다. 캐싱, 로깅, 검증과 같은 기능에 쓰일 수 있다. 피자 클래스 데코레이터 패턴 적용 예제 피자를 클래스로 매핑하여 만들어보려고 한다. 데코레이터 패턴 적용 전 데코레이터 패턴 적용 전의 코드를 보자 Pizza 생성 public class Pizza { protected String pizzaName() { return "피자"; } } 일반 피자를 만들었다...

    자바에서 상속이 갖는 단점들

    상속이 갖는 단점들 상속은 객체지향 프로그래밍의 핵심 기능이지만, 몇가지 단점을 가지고 있다. 그래서 일반적으로는 합성(composition)을 사용하는 것이 권장된다. 강한 결합이 강제된다. 부모 클래스의 소스 코드를 그대로 내려받을 수 있다는 장점이 있지만, 그만큼 자식 클래스가 많아졌을 때 부모 클래스의 소스코드 변경이 힘들다는 말도 된다. 부모 클래스의 변화가 모든 자식 클래스에 영향을 미치게 된다. 변경하려면 자식 클래스의 구현들이 제대로 돌아갈 수 있을지 테스트를 많이 거쳐야 한다. 코드의 유지보수와 수정을 어렵게 만든다. 함부로 변경했다가 자식 클래스에서 쉽게 알아차리기 힘든 미묘한 버그를 만들어낼 수 있는 가능성도 생긴다. 접근자에 대한 제약이 강하게 걸린다. 초기에 public 으로 공개..

    컴포지트 패턴 (Composite Pattern, 컴포짓 패턴) 이란?

    컴포지트 패턴 (Composite Pattern, 컴포짓 패턴) 이란?

    컴포지트 (Composite) 패턴 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴이다. 트리 형태로 데이터를 표현할 수 있을 때 유용하다. 여러 오브젝트를 트리 구조로 재구성한 뒤 오브젝트들을 각각의 오브젝트처럼 이용한다. 트리는 Leaf 와 Composite 로 이루어져 있다. 클라이언트가 복잡한 구조의 오브젝트를 이용할 때 복잡함에 영향을 받지 않고 쉽게 오브젝트를 이용할 수 있도록 도와준다. 다이어그램으로 살펴보기 Component 가 구조상 가장 Primitive 한 단위가 된다. Component 를 구현한 것이 Leaf 가 된다. Component 를 구현하면서 내부에 Component 를 포함하는 것이 Composite 가 된다. 이렇게 중첩 구조를 가진다. Client 입장에서는 ..

    브릿지 패턴 (Bridge Pattern) 이란?

    브릿지 패턴 (Bridge Pattern) 이란?

    브릿지 (Bridge) 패턴 커다란 클래스 혹은 긴밀하게 연관된 클래스를 추상 부분과 구현 부분으로 쪼개어 나눈다. 두 부분이 독립적으로 개발될 수 있다. extend 보다 composition 을 적극 활용한다. 다이어그램으로 살펴보기 현실 예제 컵을 판매하는 회사가 있다. 컵의 재질은 플라스틱, 유리, 종이 등이 존재한다. 컵의 색상은 빨간색, 파란색, 노란색, 초록색 등이 존재한다. 컵을 클래스화 시켜서 자바 프로그램에 녹여넣고 싶은데, 어떤 방식이 좋을까? 상속 (extend) 을 통한 접근 먼저 Cup 클래스를 만들었다. 컵의 재질을 표현하기 위해서 Material 인터페이스를 추가했다. Material 을 상속하는 Plastic, Glass, Paper 등을 만들었다. 이를 이용해 Cup 에 ..

    자바 디자인 패턴, 객체 생성 관련 패턴 (Object Creational Patterns) 이란?

    객체 생성 관련 패턴이란? 이름처럼 객체의 생성에 관여하는 패턴이다. 객체 생성 과정에서 일반적으로 생길 수 있는 문제를 해결하기 위해 등장했다. 5가지 객체 생성 관련 패턴에 대한 간략한 설명 싱글톤 패턴 (Singleton Pattern): 하나의 객체를 생성하여, 애플리케이션 전역에서 이용할 수 있도록 만들어준다. 생성 비용이 비싸거나 생성이 까다로운 혹은 보안상의 문제로 단 하나만 존재해야 하는 객체를 생성할 때의 문제를 해결한다. 팩터리 메서드 패턴 (Factory Method Pattern): 연관된 여러 오브젝트를 손쉽게 생성할 수 있도록 만들어준다. 공통적인 필드를 여러개 가지고 있는 다양한 종류의 오브젝트를 만들어야 할 때 중복 코드를 줄이고, 확실하게 공통로직을 사용할 수 있게 해준다...

    어댑터 패턴 (Adapter Pattern) 이란?

    어댑터 패턴 (Adapter Pattern) 이란?

    어댑터 패턴 (Adapter pattern) 현실 세계에서도 찾아보기 쉬운 패턴이다. 해외에서 한국의 전자제품을 사용하려면 110v '어댑터'를 가져가야 한다. 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 해주는 구조적 디자인 패턴이다. 클라이언트가 사용하는 인터페이스를 따르지 않는 레거시 코드를 재사용할 수 있게 해준다. 다이어그램으로 어댑터 패턴 관계 살펴보기 각 클래스에 대한 설명은 아래와 같다. Target 은 변화에 대한 요구사항이다. Adaptee 는 기존의 코드이다. Adapter 는 변화에 대한 요구사항을 구현한 새로운 코드이다. Adaptee 가 가지고 있는 기능을 Adapter 가 주입받아 operation() 을 구현한다. Client 는 인터페이스인 Ta..

    프로토타입 패턴 (Prototype Pattern) 이란?

    프로토타입 패턴 (Prototype Pattern) 이란?

    프로토타입 패턴 (Prototype Pattern) 기존의 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법이다. 클래스에 의존하지 않으면서도, 기존 객체를 복제하게 해준다. 실제로 복제되는 객체에 복제 프로세스를 위임한다. 복제를 지원하는 객체를 프로토타입 이라고 하기도 한다. 프로토타입 패턴이 해결하는 문제 객체 복사는 쉬워보이는데 왜 프로토타입 패턴이 필요할까? 비공개 필드가 있는 경우 생각보다 쉽지 않다. 클라이언트 입장에서는 인터페이스만 알고, 구현체에 대해 모를 수도 있어서 생각보다 복사하기 까다로울 수 있다. 많은 상속을 통해 다양한 필드를 늘려온 객체의 경우 필드 값을 복제하는 일이 생각보다 쉽지 않다. 프로토타입 레지스트리를 사용하면, 설정이 복잡하지만 자주 사용되는 객체를 어디 저장해두..

    빌더 패턴 (Builder Pattern) 이란?

    빌더 패턴 (Builder Pattern) 이란?

    빌더 패턴이란? 객체 생성에 연관된 패턴이다. 복잡한 객체들을 단계별로 생성할 수 있게 만들어 복잡도를 줄여준다. 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법을 제공한다. 해결하려는 문제 객체에 아주 많은 필드가 들어있어 복잡할 때 객체 생성이 어려운 문제가 있다. 생성자에 필드를 몰아놓으면 처음 객체를 생성하기가 매우 어렵다. Setter 를 이용하려고 하면, 필수값과 연계값 등 제약조건을 넣기 힘들다. 복잡한 객체를 생성할 때 빌더 패턴을 사용하면 조금 더 쉽게 생성할 수 있다. 빌더 패턴 다이어그램으로 살펴보기 복잡한 Product 를 만드는 경우, Builder 에 추상 메서드를 추가하고, ConcreteBuilder 가 이를 구현하도록 위임하여 복잡한 객체를 만드는 프로세스를 독..

    추상 팩토리 패턴 (Abstract Factory Pattern) 이란?

    추상 팩토리 패턴 (Abstract Factory Pattern) 이란?

    추상 팩토리 패턴이란? 서로 관련된 여러 객체를 만들어주는 인터페이스를 제공하고 이를 구현하는 패턴 관련이 깊은 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다. 팩토리 메서드 패턴 과 굉장히 비슷하다. 팩토리 메서드 패턴 은 하나의 객체 생성을 어떻게 할까에 집중하는 반면, 추상 팩토리 패턴은 관련 있는 여러 객체를 묶어 여러 구체적 클래스에 의존하지 않는 것에 집중한다. 다이어그램으로 살펴보기 AbstractFactory 는 CreateProductA() 와 CreateProductB() 라는 추상 메서드를 제공한다. ProductA 와 ProductB 를 생성한다. 구체적인 객체 생성 방법의 구현은 하위 클래스에게 맡긴다. ConcreteFactory1 과 ConcreteFactory2..

반응형