포스트

Day42 실습프로젝트(Decorator패턴)

Decorator 패턴

데코레이터 패턴

데코레이터 패턴의 정의

  • 정의 : 객체에 추가 요소를 동적으로 더하는 기능
  • 상속을 사용하여 객체들을 추가하면 컴파일 단계에서 결정이 되며 기능이 추가 될 수록 코드가 복잡해진다.
  • OCP : Open-Close Principle으로 클래스는 확장에는 열려 있어야 하지만 변경에는 닫혀있어야 한다.
  • 상속을 이용한 강결합은 유지보수 측면에서 OCP 원칙을 위배한다. ![image](https://github.com/user-attachments/assets/d0e5a5b8-8f5f-4f72-9f9c-8ac15849a4dc)

데코레이터 패턴 만들기

  • 커피 조제법 및 가격 출력하는 메뉴판 프로그램 만들기
  • 구성요소
    1. (interface or abstract) Componet : Concrete Component와 Decorator을 모두 받을 수 있는 슈퍼 클래스
    2. (concrete) Component : Decorator를 적용하기 전의 main이 되는 클래스(이 에제에서는 주 원료)
    3. (interface or abstract) Decorator : Concrete Decorator을 구현하기 전에 생성하는 슈퍼 클래스(이 예제에서는 데코레이터가 어떻게 작용할지 설정)
  • abstract Component ```java public abstract class Beverage{ protected String description; public String getDescription(){ return description; } public abstract cost(); } ```
  • Concrete Component ```java public class Espresso extends Beverage{ public Espresso(){ description = "Espresso"; } public String getDescription(){ return description; } public double cost(){ return 100; } } ```
  • abstract Decorator ```java public abstract class Decorator extends Beverage{ protected Beverage beverage; public abstract String getDescription(); } ```
  • Concrete Decorator ```java public class Mocha extends Decorator{ public Mocha(Beverage beverage){ this.beverage = beverage; } public String getDescription(){ return beverage.getDescription + ", Mocha"; } public double cost(){ return beverage.cost() + 200; } } ```
  • 실행하기
    1. Espresso 객체를 생성(Beverage을 상속받은 객체)
    2. 그 객체를 Mocha객체에 삽입
    3. Mocha 객체에 Beverage = Espresso 타입의 객체
    4. cagemocha.getDescription -> Beverage(Espresso타입).getDescription + 200(모카의 가격)
    5. Beverage.getDescription -> 100(에스프레소의 가격)
    ```java public class App{ public static void main(String[] args){ //데코레이터 미사용 Beverage espresso = new Espresso(); System.out.printf("%s : %f원", espresso.getDescription(), espresso.cost()); Beverage cafemocha = new Espresso(); cafemocha = new Mocha(cafemocha); System.out.printf("%s : %f원", cafemocha.getDescription(), cafemocha.cost()); } } ```

I/O Stream 데코레이터 살펴보기

        엑셀 입출력

        1. XSSF 라이브러리

        Microsoft Excel (.xlsx) 파일을 생성, 수정, 읽기 및 쓰기에 사용되는 Java API

        • 엑셀 파일 생성: 새로운 .xlsx 파일을 생성할 수 있다.
        • 엑셀 파일 읽기: 기존 .xlsx 파일을 읽어서 데이터를 추출할 수 있다.
        • 엑셀 파일 수정: 셀, 행, 시트 등을 추가하거나 수정할 수 있다.
        • 2007이하버전(.xls)은 HSSF라이브러리를 사용한다.
        • 주요클래스 <ol style="padding-left: 10px", type="1">
        • XSSFWorkbook: 엑셀 워크북을 나타내는 클래스입니다.
        • XSSFSheet: 엑셀 시트를 나타내는 클래스입니다.
        • XSSFRow: 엑셀 행을 나타내는 클래스입니다.
        • XSSFCell: 엑셀 셀을 나타내는 클래스입니다. </ol>

        2. XSSF 라이브러리 설치하기

        라이브러리 다운로드

        • maver repo에서 apachi-poi를 검색하여 필요한 버전에 gradle정보를 읽어온다.
        • https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml ![image](https://github.com/user-attachments/assets/6306d054-bf4c-4c7b-a58c-2450924ba905)
        • gradlebuild에 Implementation에 해당 값을 삽입한다.
        • IntelliJ의 경우 gradle 새로고침
        • Esclipse의 경우 터미널에서 해당 폴더 까지 이동후 gradle esclipse를 실행

        3. 주요 클래스 사용

        XSSFWorkbook

        • workbook을 생성하는 메서드 ```java XSSFWorkbook workbook = new XSSFWorkbook(); //이 생성자는 새로운 빈 워크북(엑셀 파일)을 생성하며, 이 워크북에는 시트가 없고, 필요한 시트는 추가할 수있다. XSSFWorkbook workbook = new XSSFWorkbook("data.xlsx"); // 이 생성자는 파일 경로로 지정된 data.xlsx 파일을 읽어와서 워크북을 생성한다. // 파일이 존재하고 유효한 .xlsx 파일 형식이라면, 해당 파일의 내용을 메모리에 로드한다. ```

        getSheet/ createSheet

        • 생성된 workbook에서 sheet를 관리 메서드 ```java XSSFSheet sheet = workbook.getSheet("시트명"); // 시트명을 불러온다. XSSFSHeet sheet = workbook.createSheet("시트명"); // 시트명을 만든다. ```

        getRow/ createRow

        • sheet의 행을 관리하는 메서드 ```java Row row = sheet.getRow(int a); // a행을 불러온다. Row row = sheet.createRow(int a); // a행을 만든다. ```

        getCell/ createCell

        • row의 열을 관리 하는 메서드 ```java Cell cell = row.getCell(int a); // row행 a열을 불러온다. Cell cell = row.createCell(int a); // row행 a열을 만든다. ```

        4. Java에서 Excel 파일 만들기

        Excel파일 만들고 저장하기

        1. WorkBook을 만든다.
        2. Sheet를 만든다.
        3. Row를 선택한다.
        4. Cell을 선택한다.
        5. Cell값에 SetValue를 한다.
        6. 파일을 내보낸다.

        Excel파일 불러오기

        1. 파일명을 가진 WorkBook을 만든다.
        2. Sheet를 선택한다.
        3. Row를 선택한다.
        4. Cell을 선택한다.
        5. Cell값에 getValue를 한다.

        5. 실습프로젝트에 적용하기

        Excel파일 만들고 저장하기

          ```java private void saveData(){ } ```

        Excel파일 불러오기

        1. 파일명을 가진 WorkBook을 만든다.
        2. Sheet를 선택한다.
        3. Row를 선택한다.
        4. Cell을 선택한다.
        5. Cell값에 getValue를 한다.
        이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.