쿠키를 이용한 로그인 상태 유지하기 웹 사이트의 기본 기능 중 하나는 로그인/로그아웃 기능입니다. 로그인을 하지 않은 상태에서 웹 사이트에 연결을 하면 로그인을 하도록 유도를 하는데, 이는 로그인을 했는지 판단 할 수 있는 방법이 필요하다는 뜻입니다. 로그인 상태를 확인할 때 가장 많이 사용하는 방법이 바로 쿠키를 이용하는 방법입니다. 쿠키를 이용하여 다음과 같은 방법으로 로그인 상태를 유지 할 수 있습니다. 1. 로그인에 성공하면 특정 이름을 갖는 쿠키를 생성한다. 2. 해당 쿠키가 존재하면 로그인한 상태라고 판단한다. 3.로그아웃하면 해당 쿠키를 삭제한다. 로그인 처리 먼저 로그인 처리가 되는 페이지를 작성하기전에 간단한 로그인 폼을 작성합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 ..
SRP - 단일 책임 원칙 모든 객체는 하나의 책임만을 가지면 객체가 제공하는 서비스는 하나의 책임을 수행하는데 집중 되어야 한다. 즉 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. 단일 책임 원칙이 잘 자켜지지 않은 경우는 분기 처리를 위한 if문으로 코드를 보도록 하겠습니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Person { public String job; public Person(String job) { this.job = job; } public void Work() { if(job.equals("Programmer")) System.out.println("코딩하다");..
HashMap HashMap은 key와 value를 하나의 쌍으로 묶어서 저장하는 컬렉션 인터페이스로 해싱 검색을 사용하기 때문에 데이터 접근이 빨라 대용량 데이터 처리에 적합합니다. key값은 중복된 값을 사용 할 수 없고 value는 중복된 값을 사용가능 하고 Null도 허용이 됩니다. ■ 주요함수 메서드 인자정보 설명 put (key , Value) haspmap에 한 쌍의 데이터를 넣습니다. clear 인자없음 hashmap의 내용을 초기화합니다 contatinsKey (Object key) 특정 키가 Hashmap에 존재 유무를 판단 get (Object key) 특정 키의 value값을 가지고 옵니다 remove (Object key) 특정 키 값의 map을 제거합니다. size 인자없음 해당..
쿠키(Cookie) 쿠키(Cookie)는 웹 브라우저가 보관하는 데이터입니다. 웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송하며, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있습니다. JSP에서 생성하는 쿠키는 웹 서버에서 생성 할 수 있습니다. ■ 쿠키 동작 방식 ● 쿠키 생성 단계 : JSP 프로그래밍에서 쿠키는 웹 서버측에서 생성되어, 생성한 쿠키를 응답 데이터의 헤더에 포함시켜 웹 브라우저에 전송합니다. ● 쿠키 저장 단계 : 브라우저는 응답 데이터에 포함된 쿠키를 저장합니다. ● 쿠키 전송 단계 : 브라우저는 저장한 쿠키를 요청이 있을 때마다 웹 서버에 전송합니다. 웹 서버는 전송받은 쿠키를 이용해서 필요한 작업을 수행합니다. ■ 쿠키의 구성 ● 이름 ..
브릿지 패턴 (Bridge Pattern) 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 합니다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 합니다. ■ 브릿지 패턴의 구조 ● Abstraction : 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출합니다. ● RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스 ● Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의 ● ConcreteImplementor : 실제 기능을 구현합니다. ■ 브릿지 패턴 예제 각 '동물'이라는 클래스와 이 동물 클래스가 가질 수 있는 '사냥방법'을..
프록시 패턴 (Proxy Pattern) 'proxy'는 대리인이라는 뜻입니다. 자바 코드에서 생각을 해보면 어떤 클래스의 수행을 대신 수행 하는 것으로 생각 할 수 있습니다. Proxy Pattern을 사용하는 경우는 어떤 클래스의 객체 생성이 오래 걸리는 경우 그 일을 분업을 하여 proxy 클래스에서 처리 할 수 있는 부분은 처리를 하고 proxy 클래스에서 처리 할 수 없는 작업에 대해서만 실제 클래스의 객체를 생성하고 위임하는 방식을 취합니다. ■ 프록시 패턴 구조 ● Client : proxy 패턴을 사용합니다. ● Subject : proxy와 RealSubject가 가져야 할 공통 인터페이스를 정의합니다. ● Proxy : RealSubject에 대해 대리 수행을 실행합니다. ● RealS..
퀵 정렬 (Quick Sort) 기준이 되는 원소를 기준으로 하여 기준 원소보다 작거나 같은 값을 지닌 자료는 앞으로 큰 값을 진ㄴ 자료는 뒤로 가도록 하여 기준 원소를 중심으로 분할해가며 정렬을 진행하는 방식입니다. ■ 정렬방식 1. 기준이 되는 원소를 정합니다. 배열의 시작 원소를 pivot으로 설정합니다. 2. 좌우 인덱스를 지정합니다. 해당 인덱스는 다음을 의미합니다. - left : pivot 보다 큰 값을 찾으러 다니는 index - right : pivot 보다 작은 값을 찾으러 다니는 index - left_hold : pivot을 제외하고 정렬 대상의 시작점 - right_hold : pivot을 제외하고 정렬 대상의 끝점 3. left를 pivot보다 큰 값을 찾을 때 까지 이동합니다...
클래스 다이어그램 클래스 다이어그램은 시스템의 정적인 상태인 '논리적인 구조'를 표현합니다. 클래스 다이어그램의 주목적은 클래스간의 관계를 한눈에 파악하는데 있습니다. ■ 클래스의 표현 Class Name Attribute1 Attribute2 operation1(인자타입):반환타입 operation2(인자 타입):반환타입 일반적인 클래스는 사각형으로 표시되고 맨 상단은 class의 이름에 해당됩니다. 중단은 클래스가 포함하고 있는 멤버 변수들이오고 접근 제한자 public,private,protection에 대해서 각각 +,-,# 으로 표현이 됩니다. 하단에는 클래스가 포함하고 있는 메서드들이 표현이 됩니다. 원본 소스입니다. Person 클래스를 클래스 다이어그램으로 표현합니다. 인터페이스나 추상 클..
버블정렬 (Bubble Sort) 두 인접한 배열요소를 차례대로 검사를 하여 정렬을 하는 방식 ■ 정렬 방식 1. 배열의 가장 앞에서 인접한 두 개의 요소에 대하여 비교를 한다. (배열의 첫 번째 요소와 두 번째 요소) 2. 배열의 다음 인접한 요소(두 번째와 세번째를 비교를 한다.) 3. 배열의 끝까지 반복을 한다. 한 사이클이 끝나면 배열의 맨 끝에는 정렬된 요소 하나가 정렬이 된 채 자리잡는다. 4. 정렬이 된 마지막 요소를 제외한 나머지에 대하여 1,2,3 번 과정을 반복한다. 정렬이 된 상태 비교 원소 5 4 3 2 1 최초 정렬이 이루어지지 않은 상태의 배열입니다. 5 4 3 2 1 첫 번째 요소와 두 번째 요소를 비교합니다. 4가 더 작으므로 둘의 위치를 교환합니다. 4 5 3 2 1 다음 ..
어댑터 패턴 (Adapter Pattern) 어댑터는 변환기로, 서로 다른 두 인터페이스 사이에 통신이 가능하게 합니다. 프로그램에서 어댑터 패턴 디자인이란 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 인터페이스로 변환하고자 할때 사용합니다. ■ 문제 A라는 사람이 B파서를 통해 HTML 문서를 파싱하는 어플리케이션을 만들었습니다. 그러던중 B파서 말고도 다른 종류의 문서도 파싱 할 수 있는 C파서도 필요하게 되었습니다. 살펴보니 C파서와 B파서가 제공하는 인터페이스는 약간의 차이가 있습니다. 이러한 상황에 대해 Adapter Pattern을 적용하여 문제를 해결 해보겠습니다. ■ B파서만 사용하는 기존코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class..
삽입 정렬 (Insetion Sort) 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 입니다. ■ 정렬 방식 1. 배열의 첫 번째 요소는 정렬 된 상태라고 가정한다. 2. 배열의 두 번째 요소부터 앞에 정렬된 배열을 차례대로 비교하며 교환한다. 3. 최종적으로 자신의 위치에 맞는 위치에 삽입된다. 4. 다음 배열 요소에 대해서 같은 작업을 반복한다. : 정렬이 완료 된 상태 : 비교되는 배열 요소들 5 4 3 2 1 첫 번째 배열요소는 정렬이 완료된 상태라고 가정을 합니다. 5 4 3 2 1 두 번째 요소부터 비교를 시작합니다. 앞에 정렬된 첫 번째 요소와 비교를 하고 4가 더 작으므로 둘의 위치를 바꿔줍니다. 4..
this 키워드 자기 자신애 대한 객체 참조값을 가진다. 메서드 내에서 사용되어 지고 static 메서드에서는 사용 할 수 없다. ■ 매개변수와 객체가 가지는 변수의 이름이 같을 경우 보통 생성자의 인자로 받는 변수의 이름이랑 객체에 속해있는 멤버변수의 이름이 같을 경우에 이 두개를 구분하기 위해 this 키워드를 사용합니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class student { private String name; private int age; private String email; private String number; public student(String name,int age,String ..
선택 정렬(Selection Sort) 기존 위치에 맞는 원소를 선택하여 교환하는 방식 ■ 정렬 방식 1. 아직 정렬이 안된 리스트 중에 가장 앞에 원소를 최소값으로 설정 2. 가장 앞에 원소를 제외한 나머지 원소를 차례로 비교하고 최소값을 찾아감 3. 리스트 끝까지 비교 후 찾은 최소값을 가장 앞에 원소와 교환 4. 정렬이 안된 원소들을 가지고 반복 ■ 특징 - 최소값을 찾기 위한 비교횟수는 많지만 교환 횟수는 적다. - 데이터의 개수가 적을 때 좋은 성능을 발휘한다. - 시간복잡도 : O(n^2) ■ 소스코드 (Source Code) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public int[] Selection_Sort(int[] data,int num..
Builder 패턴 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴입니다. ■ 빌더 패턴(Builder Pattern) 사용 이유 Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class PersonInfo { private String name; private int age; private String email; private String number; public PersonInfo(String name,int age,String email,String number) { this.name = name; this.age = age;..
Final 키워드 final은 마지막, 최종적이라는 의미를 가지고 있기 때문에 변수나 메서드의 내용을 수정하지 않고 고정 시킬 때 사용하는 키워드 입니다. ▶ 클래스에의 final 키워드 클래스에 final 키워드가 붙는 경우는 '상속 불가'의 의미를 가집니다. 1 final public class A {} A 클래스를 final 키워드를 통해 다음과 같이 정의를 하였습니다. 1 public class B extends A{} B 클래스가 A클래스를 상속받게 하면 다음과 같은 오류가 발생합니다. B 클래스는 A클래스의 하위 클래스가 될 수 없다는 오류가 발생합니다. ▶ 메서드의 fnal 키워드 메서드의 final 키워드가 붙는 것은 '재정의 불가'를 의미합니다. 상위 클래스의 메서드를 하위 클래스에서 오..