게시글 만들기 #3

Yullc·2025년 3월 27일
post-thumbnail

1. 리팩토링, 구조 개선

이제 차근차근 역할에따라 클래스를 만들어서 역할 분담을 좀 해볼거야.
우리가 먼저 만들어야 할 클래스는 App, Article, Member, MemberController, ArticleController이 있어.
이제 하나하나 역할을 살펴보자.

App

  • 사용자가 명령하는 공간? 이라고 생각하면 돼. 예를 들어 article write, article list라고 App 클래스에서 명령하면 컨트롤러 쪽으로 연결시켜주는 역할 정도로 생각하자.

Article

  • Article 클래스는 여기에 article에 관련된 변수를 저장하고, getter와 setter를 저장하는 곳이야.
  • 여기에 저장된 변수들은 private로 저장되어있어서 getter와 setter를 생성하는거고 사용할 떄는 getId(); 뭐 이런식으로 사용하면 돼!

Main

  • 메인클래스에는 이제 new App().run; 이것만 적을거야. 원래는 메인에서 모든걸 만들었지만 이제 역할 분담을 좀 해야하기 때문에 App클래스의 run함수만 실행시켜줘서 프로그램을 실행 시킬거야.

Member

  • Member 클래스는 우리가 회원가입을 했잖아? 거기에 필요한 변수들을 저장하는 공간이야. Article 클래스랑 느낌이 비슷하지.
  • 여기도 마찬가지로 getter와 setter도 저장해서 꺼내서 사용할 수 있어

ArticleController

  • ArticleController 클래스는 Article에 관련된 기능 쪽을 다루는 클래스라고 생각하면 돼.
  • 그래서 ArticleList를 여기에 생성자로 저장할거야. 그럼 프로그램이 실행되자마자 자동으로 만들어지는거 알고있지?
  • 우리가 App클래스에서 명령을 하잖아? 그럼 ArticleController에 있는 메서드를 실행해서 기능을 수행하는거야. 사용자 : article write -> 컨트롤러: doWrite(); 요렇게

MemberController

  • 먼저 여기도 생성자로 Member:ist를 만들자.
  • 그리고 원래 Main클래스에서 회원가입하는 로직이랑 비밀번호 설정하는 로직들을 여기로 가져올거야.

그러면 뭔가 역할이 분담이 된 느낌이잖아? 앞으로 큰 프로젝트를 진행할 때 이렇게 분리를 해줘야지 뭐가 뭔지 알고 다른사람이 내 코드를 봤을 때 이해하기 편하고 얼마나 좋아?! 저는 안좋아요..

2. Controller 상속

아까 MemberController랑 ArticleController랑 만들었지! 근데 우리가 Controller라는 상위 클래스를 만들어서 얘네들을 상속하도록 해볼거야.여기서 더 복잡하게 한다고요..... 저한테 왜그러세요.. // 복잡하게가 아니라 더 편하게 하는거라니까?

컨트롤러에서는 뭐 하는걸까?

	 MemberController memberController = new MemberController(sc);
        ArticleController articleController = new ArticleController(sc);
        while (true) {
            System.out.print("명령어) ");
            String cmd = sc.nextLine().trim();

            if (cmd.length() == 0) {
                System.out.println("명령어를 입력하세요");
                continue;
            }
            if (cmd.equals("exit")) {
                break;
            }

            String[] cmdBits = cmd.split(" ");

            String controllerName = cmdBits[0];

            if (cmdBits.length == 1) {
                System.out.println("명령어 확인 필요");
                continue;
            }

            String actionMethodName = cmdBits[1];

            if (controllerName.equals("article")) {
                controller = articleController;
            } else if (controllerName.equals("member")) {
                controller = memberController;
            } else {
                System.out.println("지원하지 않는 기능입니다");
                continue;
            }

            controller.doAction(cmd, actionMethodName);
  • 우리가 Member랑 Article 컨트롤러를 가지고 있잖아? 뭘 사용할건지 판별해주는 시스템? 이라고 생각하면 될거야.
  • controllerName이 즉 우리가 입력하는 명령어가 article로 시작하면 articleController로 연결하고 member로 시작하면 memberController로 연결할거야.
    -그리고 controller 클래스에 있는 doAction클래스를 실행하면 memberController를 실행할 수 있고, articleController를 실행할 수도 있다!

3. 패키징, 리팩토링

이번에는 클래스들이 많아졌으니까 폴더로 묶어서 정리하는걸 해보자. 그리고 추가적으로 dto클래스도 만들거야. 아니 결벽증이라도 있으세요..? 정리를 너무 많이 하시넿ㅎㅎ

ArticleManager Package

  • App
  • Main

controller Package

  • ArticleController
  • Controller
  • MemberController

dto Package

  • Article
  • dto
  • Member

util Package

  • util

패키지는 이렇게만 만들어주고 dto가 뭔지 알아보자.

4. DTO

DTO(Data Transfer Object, 데이터 전송 객체)란 그냥 뭐 내가 가지고있는 데이터들을 여기저기 전송해주는 역할이야

  • 우리 코드에서는 dto 클래스를 만들고 Article,Member클래스를 상속시켜.
  • 그리고 둘이 같은 변수를 가지고 있지? id와regDate변수를 dto클래스에 저장해.
  • 그러면 어쩌피 상속이니까 Article에서도 사용할 수 있고 Member에서도 사용할 수 있어. 너무 너무 좋다 그치?!

전체 코드가 궁금하면 gitHub로..
https://github.com/Yullc/AM_25_03

profile
아자아자자

0개의 댓글