Study 46

Observer Pattern

옵서버 패턴 : 데이터의 변경 발생했을 때 상대 클래스/객체에 의존 하지 않고 데이터 변경을 통보하고자 할 때 유용함. ▶ 예로, 차량의 연료가 소진될 때 까지 주행 가능 거리 출력하는 클래스, 연료량 부족 경고 메시지 보내는 클래스 등에 연료량의 변화를 통보하는 경우가 있는데, 이럴 때 연료량 클래스는 연료량에 관심 갖는 구체적 클래스(주행 가능 거리 출력, 연료량 부족 경고, 주변 주유소 검색)에 직접 의존하지 않는 방식으로 설계하는 것이 바람직! 옵서버 패턴은 통보 대상 객체의 관리를 Subject 클래스와 Observer인터페이스로 일반화함 ▷ 데이터 변경을 통보하는 클래스(ConcreteSubject)는 통보 대상 클래스/객체(ConcreteObserver)에 대한 의존성 없앨 수 O ▷ 옵서버..

Command Pattern

커맨드 패턴 : 이벤트가 발생했을 때 실행될 기능이 다양하면서 변경이 필요한 경우 이벤트를 발생시키는 클래스의 변경 없이 재사용 하고자 할 때! ▶ 실행될 기능을 캡슐화 함으로써 기능의 실행 요구하는 호출자 클래스와 실제 기능 실행하는 수신자 클래스 사이의 의존성 제거 따라서, 실행될 기능 변경에도 호출자 클래스를 수정하지 않고 그대로 사용할 수 있도록 해줌! (버튼 눌렀을 때의 기능을 캡슐화 함으로써, 알람을 울리게 하든 램프를 키게 하든 버튼 클래스의 소스 코드 변경 없도록 함) 버튼 클래스와 Alarm, Lamp 클래스 사이의 의존성 없앰! ▶ 커맨드 패턴은 변화되는게 전략/알고리즘/비즈니스 규칙 이 아닌, 기능이 변함! Command 패턴 용어 - Invoker : 기능의 실행 요청하는 호출자 클..

Strategy Pattern

▷ 이 설계방식은 새 로봇 추가하기에 좋음. 클래스 자체가 하나의 로봇을 모델링 하고 표현하기 때문! (변화의 단위=클래스) * attack(), move() → 추상메소드 (이탤릭체) 문제점? 기존 로봇의 공격/이동 방법 수정하려면 어떤 변경 작업이 필요한가? 예로, 아톰이 날 순 없고 걷게만 만들고 싶다면? (= 공격 알고리즘 변경 해야함) 혹은 태권V 날게 하려면? → OCP 위반! (기존코드 변경시킴) 새로운 로봇 만들어 기존의 공격/이동 방법 추가/수정 하려면? 예로, 새로운 로봇으로 선가드 클래스를 만들어 태권V의 미사일 공격 기능 추가하려면? → 중복부분이 많기 때문에 변경사항이 생길 때 힘듦. 로봇 추가는 전혀 문제 없지만, 공격/이동 알고리즘 변경될 때 문제임. (각각 클래스로 모델링 된..

빌더 패턴

빌더 패턴이란? 객체 생성 패턴 ▶ 생성자의 인자가 많은 경우 ▶ Immutable 객체 (변경할 수 없는 객체)를 생성하고 싶은 경우 (수정 불가한 객체) ▶ 생성자의 인자들 중 반드시 데이터를 제공해야 하는 필수적 인자와 없어도 되는 선택적 인자가 혼합돼있는 경우 Telescoping Constructor 패턴 (점층적 생성자 패턴) ▷ 생성자 점점 추가시켜 속성 정보 설정해 객체 생성! ▷ 필수 인자를 받는 생성자 정의 후에 선택적 인자 추가로 받는 생성자 계속해서 정의 점층적 생성자 패턴의 문제점 (Telescoping Constructor 패턴) 1. 인자가 많을수록 생성자 개수 많아짐 2. 생성자의 인자가 어떤 의미인지 파악 힘듦 (intellij에선 매개변수가 나오기 때문에 알고 있지만, 이..

객체지향원리

추상화 모델링은 '추상화'에 바탕을 둠 : 특정 관점에서 관련 있는 건 부각시키고, 관련 없는건 무시 어떤 영역에서 필요로 하는 속성/행위를 추출하는 작업 (관심 있는 부분에 집중 가능!) 캡슐화 : 관련 있는 것들 끼리 모아놓음 클래스는 캡슐화를 제공하는 수단으로, 서로 관 련있는 속성/메소드로 구성돼있다. '요구사항의 변경'은 소프트웨어 개발의 골칫거리인데, 이에 대한 해결법은 요구사항 변경을 당연하다고 생각하고 이에 대비하는 것이다. '캡슐화'를 통해 높은 응집도와 낮은 결합도를 갖는 설계를 한다! 결합도를 낮게 하려면? '정보 은닉(information hiding)' - private, public 등 이용 중요한 정보에 직접적으로 접근 하는 것이 X (허용된 것만 사용해 접근) → 정보 내용 ..

[웹 쇼핑몰 실습] 주문 처리 페이지 만들기

쿠키를 이용해 주문 처리 페이지 만들기 장바구니 페이지 수정 (cart.jsp 파일 추가 작성) 주문하기​ 배송 정보 페이지 작성하기 (shippingInfo.jsp 파일 생성 후 다음과 같이 작성) 배송 정보 성명 배송일 (yyyy/mm/dd) 국가명 우편번호 주소 이전 취소 ​ 배송 정보 처리 페이지 작성 (processShippingInfo.jsp 파일 생성 후 다음과 같이 작성) ​ 주문 정보 페이지 작성 (orderConfirmation.jsp 파일 생성 후 다음과 같이 작성) 이전 주문 완료 취소 ​ 주문 완료 페이지 작성 (thankCustomer.jsp 파일 생성 후 다음과 같이 작성)

Study/WebServer 2021.08.22

[웹 쇼핑몰 실습] 로그 기록하기

필터 처리로 로그 기록하기 1. Filter 인터페이스의 구현 클래스 작성 : /src/ 폴더에 filter 패키지를 만든 후, 이 패키지에 LogFilter.java 파일을 생성하고 다음과 같이 작성 LogFilter.java package filter; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; import java.text.DateFormat; import java.text.SimpleDateFormat; public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException{ System.out...

Study/WebServer 2021.08.22

[웹 쇼핑몰 실습] 유효성 검사

상품 등록 페이지의 유효성 검사하기 1. 자바스크립트 관리 폴더 만들기 : /WebContent/resources/ 폴더에 자바스크립트 파일을 관리하는 js 폴더를 만들고 이 폴더에 validation.js 파일 생성 2. 유효성 검사를 위한 핸들러 함수 작성 validation.js function CheckAddProduct() { var productId = document.getElementById("productId"); var name = document.getElementById("name"); var unitPrice = document.getElementById("unitPrice"); var unitsInStock = document.getElementById("unitsInStock"..

Study/WebServer 2021.08.22

[웹 쇼핑몰 실습] 상품 이미지 등록하기

상품 목록 페이지 수정 products.jsp 상품 상세 정보 상품 코드 : 제조사 : 분류 : 재고 수 : 원 상품 주문 » 상품 목록 » 상품 이미지 업로드하기 상품 이미지 파일의 저장 위치 만들기 : c드라이브에 upload 폴더 생성 후 이 폴더에 상품 이미지 파일명을 상품 아이디로 하여 등록 오픈 라이브러리 cos.jar 등록 : MultipartRequest 클래스를 이용한 파일 업로드를 위해 cos.jar ㅍ파일 등록 상품 목록 페이지 수정(products.jsp) ​ 상품 상세 정보 페이지 수정(product.jsp) ​ 상품 정보 등록 페이지 수정(addProduct.jsp) 상품 등록 상품 코드 상품명 가격 상세 정보 제조사 분류 재고 수 상태 신규 제품 중고 제품 재생 제품 이미지 ​..

Study/WebServer 2021.08.22