학습목표

  • 프로토 타입 패턴을 통해서 복잡한 인스턴스를 복사 할 수 있다. 
  • 다수의 객체 생성시에 발생되는 객체의 생성 비용을 효과적으로 줄인다


프로토타입 패턴의 장점

1. 객체를 생성해 주기 위한 별도의 객체 생성 클래스가 불필요하다

2. 객체의 각 부분을 조합해서 생성되는 형태에도 적용 가능하다. 


프로토타입 패턴의 단점

1. 생성될 객체들의 자료형인 클래스들이 clone()메서드를 구현해야 한다.









[소스 : https://github.com/kimjongmo/DesignPattern/tree/master/006ProtoType]

[참고 : http://leetaehoon.tistory.com/55  https://www.youtube.com/watch?v=oWsS67joKJA&t=401s]

학습목표

  • 하나의 인스턴스만 생성하고 이용할 수 있도록 하는 것

구조도는 다음과 같습니다.



대표적인 싱글톤 예제는 DBCP가 있습니다. 



객체 생성을 줄임으로서 Heap 영역의 메모리가 줄었고, 하나의 인스턴스만 공유할 수 있게 되었다. 




개인적으로 조금 주의를 가해야 한다는 생각은 자원을 공유한다는 것이기 때문에 멀티 스레드 같은 환경에서는 동기화를 시켜서 사용해야 할 것 같습니다. (그냥 Synchronized보다는 좀 더 효율적으로 만들순 없을까나... 훔...)


또 싱글톤의 경우 종료시까지 Heap 영역에 남는다는 점도 있습니다(가비지 컬렉터가 지우지 못한다) 



[소스 : https://github.com/kimjongmo/DesignPattern/tree/master/05Singleton]

[참조 : https://www.youtube.com/watch?v=5jgpu9-ywtY&t=136s]



학습목표
  • 팩토리 메소드 패턴에서 템플릿 메소드 패턴의 사용됨을 안다.
  • 팩토리 메소드 패턴에서의 구조와 구현의 분리를 이해하고 구조와 구현의 분리의 장점을 안다.


빨간 구역은 framework 패키지

파란 구역은 concrete 패키지입니다.


설명에서도 템플릿 메소드가 나오듯이 두 가지 패턴이 굉장히 헷갈리는 패턴입니다. 


강의 외에 두 가지가 차이가 잘 이해가 가지 않아서 좀 더 찾아본 결과 제 결론은 이렇습니다


템플릿 메소드 : 슈퍼클래스에서 로직의 흐름을 정하고, 서브클래스는 상속받은 로직의 흐름을 유지하고 , 기능을 구체화 시킵니다.

    Ex)

    로직의 흐름 : (A에서 B로 갈꺼다)

    기능 정의    : C와 D를 거쳐 A에서 B로 간다,  C와 E를 거쳐 A에서 B로 간다.


팩토리 메소드 : 서브클래스에서 오브젝트 생성 방법을 결정하는 것. 템플릿 메소드는 흐름이지만 팩토리 메소드는 오브젝트를 생성하는 것

                     Ex)
                     아이템을 만드는 과정 : (  a-b-c  ) ->  Item만듬         * 이 과정에서 (a-b-c)로직은 템플릿   item을 만든 다는 것은 펙토리

                      서브클래스 : (a - b - c) ->Item1을 만듬,  (d - e - f) -> item2


[소스 : https://github.com/kimjongmo/DesignPattern/tree/master/04FactoryMethod]

[출처:https://www.youtube.com/watch?v=-gyoG-7MHLI&list=PLsoscMhnRc7pPsRHmgN4M8tqUdWZzkpxY&index=4]




학습 목표

  • 일정한 프로세스를 가진 요구사항을 템플릿 메소드 패턴을 이용하여 구현

탬플릿 메소드 패턴 : 알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴.
                            -> 변하지 않는 기능은 슈퍼클래스에서 만들어주고 자주 변경되어 확장할 기능은 서브클래스에서 만든다.

 


언제 쓰일까?

 - 구현하려는 알고리즘이 일정한 프로세스가 있다.

 - 구현하려는 알고리즘이 변경 가능성이 있다. 


어떤 단계로 써야 할까?

 - 알고리즘을 여러 단계로 나눈다.

  ex) 게임에 접속 시 아이디 비밀번호 로그인 과정, 해당 회원의 등급(회원, 관리자) 확인 과정, 연결 과정


 - 나눠진 알고리즘의 단계를 메소드로 선언한다.

  ex) 위의 로그인 과정, 등급 확인 과정, 연결 과정 들을 각 각 메소드로 정의.


 - 알고리즘을 수행할 템플릿 메소드를 만든다.

  ex) 하나의 메소드 안에 이 과정들을 담는다.


 - 하위 클래스에서 나눠진 메소드들을 구현한다.

  ex) 나눠진 알고리즘의 단계를 하위 클래스들이 구현한다.




AbstGameConnectHelper클래스의 requestConnection 메소드는 abstract로 선언한 메소드들을 담고 있는 템플릿 메소드입니다.

DefaultGameConnectHelper클래스는 위의 클래스를 상속받은 클래스로 각 각의 나눠진 메소드들을 정의하는 클래스입니다. 


이렇게 구현이 되었다고 생각했을 때 , 보안 과정에 추가적인 문제를 선언해야 한다면 프로세스(requestConnection)를 변경할 필요없이 DefaultGameConnectHelper클래스의 doSecurity메소드만 재정의하면 된다는 것이다. 


템플릿 메소드의 정의를 다시 한번 보도록 하자


"알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴"



[출처 : https://www.youtube.com/watch?v=qr7I18Lhsl8]

학습 목표

  • 알고리즘을 요구사항에 맞게 사용할 수 있다.

상황을 예시로 들자면  "A라는 알고리즘을 돌리게 되면 효율이 매우 떨어진다는 것을 알게 되었고, B라는 알고리즘으로 대체를 하는 상황"이 가장 적절하다고 생각한다.


클래스의 구성은 다음과 같이 되어있다. AdapterImpl.class에서는 sort()라는 메소드안에 Sort.class의 알고리즘을 장착하고, Main.class에서는 이 AdapterImpl.class의 sort 메소드를 사용한다.


1. 버블 소트를 사용하고 있을 때


2. 버블 --> 퀵



 다음 사진에서 볼 수 있듯이 Main.class에는 어떠한 변경도 일어나지 않았지만 전혀 다른 알고리즘으로 바꿀 수 있게 되었다.



[출처 : https://www.youtube.com/watch?v=gJDZ7pcvlAU]

학습 목표

  • 인터페이스 개념
  • 델리게이트 개념
  • 전략 패턴 이해


인터페이스 : 기능의 선언과 구현으로 분리시킨다.



델리게이트 : 특정 객체의 기능을 사용하기 위해 다른 객체를 호출하는 것.


전략 패턴 : 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴.

(바뀌는 부분을 인터페이스로 분리하여 처리)


다음 클래스 다이어그램에 맞게 구현해보면서 이해해보자!!


[소스 : https://github.com/kimjongmo/DesignPattern/tree/master/00Strategy]

[출처 : https://www.youtube.com/watch?v=UEjsbd3IZvA]

Maven이란?


Java기반 프로젝트의 *라이프사이클 관리를 목적으로 하는 빌드 도구이다. 컴파일과 빌드를 동시에 수행, 테스트를 병행하거나 서버 측 Deploy 자원을 관리할 수 있는 환경을 제공한다. 또한 라이브러리 관리 기능도 내포하고 있다. Java로 개발하다 보면 다양한 라이브러리를 필요로 하게 되는데, *pom.xml 파일에 필요한 라이브러리만 적으면 Maven이 알아서 다운받고 설치해주고 경로까지 지정해준다.


프로젝트를 진행하다 보면 라이브러리들을 많이 활용하게 됩니다. 점점 많아지는 라이브러리들을 일일히 관리하기 힘들어집니다. 하지만 Maven을 이용하게 된다면 코드 몇줄로 필요한 라이브러리를 작동시키고 그 라이브러리가 필요로 하는 다른 라이브러리(의존 라이브러리)들까지 자동으로 관리해줍니다. 


* Life cycle      : 논리적인 작업 흐름

* pom.xml       : Project Object Model, 메이븐이 프로젝트를 처리하는 필요한 정보를 제공하는 파일

* Artifact         : 프로젝트에 필요한 jar, war, pom 등등

* Deploy         : 아티페그를 로컬 저장소에 저장하는 행위


Maven의 활용


1. Build

- 소스 코드를 컴파일 한다

- 테스트 코드를 컴파일 한다

- 기타 패키지 생성을 위한 바이너리를 생성


2. Package

- 배포 가능한 jar, war, exe 파일 등을 생성


3. Test

- 단위 테스트(Unit test) 등을 실행


4. Report

- 빌드/패키지/테스트 결과를 정리하고, 빌드 수행 리포트를 생성


5. Release

- 빌드 후 생성된 아티팩트를 로컬 혹은 원격 저장소에 저장한다.



MAVEN 기초 사용법


http://javacan.tistory.com/entry/MavenBasic











출처 :

https://namu.wiki/w/Maven

https://www.slideshare.net/sunnykwak90/ss-43767933


졸작을 위해서 리눅스를 설치하고 개발 환경을 설치하던 중에 계속 반복되는 에러가 뜸..


"아카이브를 받을 수 없습니다. 아마도 apt-get update를 실행해야 하거나 --fix-missing 옵션을 줘서 실행해야 할 것입니다."


apt-get update 명령어를 실행해도 계속 비슷한 종류의 에러가 뜨길래 찾아보았는데, 아마도 패키지 다운로드 서버의 문제였었던 것 같

다. 어떤 이유에서인지는 정확히 모르겠지만 서버를 옮긴 후 위의 문제가 쉽게 해결이 되었다.


1)터미널을 연다


2)su (루트 계정 전환)


3)vi /etc/apt/sources.list (sources.list 편집)


4) :%s/kr.archive.ubuntu.com/ftp.daumkakao.com/g  (kr.archive.ubuntu.com 서버에서 ftp.daumkakao.com 서버로 설정 바꾸기)


5) 적용 후 종료


'Programming > 리눅스' 카테고리의 다른 글

Linux admin 2일차  (0) 2018.11.19
Linux Admin 1일차  (0) 2018.11.16
아카이브를 받을 수 없습니다.  (0) 2018.03.09
리눅스 기본 명령어 정리  (0) 2018.01.17
[리눅스/CentOS7] 싱글 모드 진입하기  (0) 2017.08.14
[리눅스]한글이 안 써질 때  (0) 2017.08.13

프로젝트명

공모전 도우미

 개 발 언 어

java, jsp, html, javascript, css

프로젝트 종류 

개인 프로젝트 

 개 발 도 구

OS : Window10

Tool : Eclipse

DB : MySQL

웹 컨테이너 : Tomcat9.0

 프로젝트 기간

 2017.11.03 ~ 2017.12.15

 프로그램 요약

◆개발 목적

원하는 공모전을 쉽게 찾을 수 없을 뿐더러 참여하는 인원의 구체적인 작업이 없음 또한 대체로 글(네이버카페)로만 되어있어 직접 다 읽어야 하는 귀찮음이 있음.

 

◆프로그램 설명

카테고리를 통해 원하는 공모전을 쉽게 찾을 수 있으며, 공모전 모집 게시판을 따로 만들어 관리할 수 있도록 하였다.


 주 요 화 면


1) 팀원 모집 게시판



2) 공모전 정보 게시판

3) 글 보기, 글 쓰기


4) 관리자 회원 차단 기능

 주 요 기 능

1) 회원 차단

회원 차단 디비 테이블을 따로 만들어 차단을 누르게 되면 회원 차단 테이블에 차단이 되는 식으로 만들었습니다.


2) 회원 가입

자바스크립트를 이용하여 잘못된 양식으로 가입되는 것을 방지하였습니다.


3)글 수정

글 보기에서 글 수정을 클릭하게되면 현재 글의 아이디가 같은지 검사를 하고 같다면 글을 올리기 전의 상태(글이 전부 쓰여져있음.)에서부터 고칠 수 있도록 함.

4) 글 삭제

글을 올린 본인만 글 삭제 기능을 볼 수 있으며, 해당 글과 관련된 댓글은 데이터베이스 상에서 연쇄 삭제(cascade)를 설정해놓음.



 

 

'Programming > 프로젝트' 카테고리의 다른 글

(jsp)공모전 도우미 게시판  (0) 2018.02.02
(C#)리듬게임  (0) 2017.12.16
(C#)물건관리시스템  (0) 2017.12.16
(자바) 챗봇 프로젝트  (0) 2017.10.23
(자바)쇼핑몰 데이터베이스 프로젝트  (0) 2017.08.28
(자바)채팅 프로그램 프로젝트  (2) 2017.08.27

매번 form에서 날라오는 파라미터의 인코딩을 위해 다음과 같이


request.setCharacterEncoding("utf-8");


를 추가해야 할 때 씀.


프로젝트의 WebContent-WEB_INF-web.xml파일을 연다.

(web.xml이 보이지 않는다면 프로젝트 폴더(루트폴더)에서 우클릭 -> Java EE Tools -> Generate ~~를 클릭해주세요)


그리고 다음과 같은 화면 밑에 source 탭을 눌러 아래 코드를 추가해준다.





붙여 놓은 내용중 보아야 할 것은 filter-class이다.


filter-class의 경로를 위해 src에 filter패키지를 만들고 SetCharacterEncodingFilter클래스를 만들어 아래의 내용을 추가해주자.




이렇게 클래스를 만들어주게 되면 위의 xml에서 설정을 해서 필터를 등록하게 된다.


필터의 원리는 다음 사진과 같을 것이다.


[사진 출처 : http://javacan.tistory.com/entry/58]


'Programming > JSP' 카테고리의 다른 글

애플릿 서블릿  (0) 2018.10.26
쿠키 정리 파일  (0) 2018.10.17
web.xml 설정을 통한 파라미터 인코딩  (0) 2018.01.23
[JSP] 학점 변환기  (0) 2017.09.29
톰캣 설치 후 오류 - No ouput folder  (1) 2017.09.10

+ Recent posts