오랜만에 정수 2개의 사칙연산을 구해주는 계산기를 만들어 보라 하셨다.
객체 쓰지 말고 그냥 대충 만들라 하셨는데 못 듣고 객제치향으로 만들었다. 어느정도 다 만들고 나니 얘기를 꺼내셨다.
회사에 일이 생기면 업무를 세분화하여 분할 업무를 할 것이다.
프로젝트
고객
PM
리더급 개발자 A
신입 back-end 개발자 B
신입 front-end 개발자 C
디자이너A
디자이너B
디자이너C
등등등
...
조별과제를 할 때 ppt 파일 하나를 여러명이 작업하면 어떻게 되겠는가? 분명 개판이 날 것이다.
파일 하나는 한명이 맡아서 끝내는게 작업하기가 편할 것이다.
각 직군별로 한 사람이 파일 하나를 온전히 작업할 수 있게 (책임 질 수 있게) 해야 원활한 프로젝트 진행이 가능할 것이다.
그래서 필요한 것이 MVC 패턴이다.
MVC 패턴 : 어떤 파일 하나 있으면 M/V/C 중에 하나의 역할만 맡는 패턴.
Model[개발자] - 비즈니스 로직[실제 계산]
View[디자이너] - 실제로 사용자에게 보여지는 파일[입력/출력]
Controller[리더급 개발자] - 상황판단해서, M, V 부르는 흐름제어, 프로그램의 시작점(main 여기다가)
이제 MVC 각자의 클래스 1개씩 만들어 보랬다.
(참고로 계산기 만드는 중이다. 저 자바??? 이 말은 V를 다루는 디자이너 같은 경우 자바를 전혀 모르는 사람이라고 생각하고 최대한 간단하게 값을 줘야 된다는 말이다.)
V의 클래스인데 콘솔창이 이용자들이 쓰는 홈페이지라 생각하면 되겠다. 그런데 x, y 값 두개를 보내기가 애매하다.
(괜히 길게 다 캡처 했다.) XY라는 객체 하나 더 만들고
이런식으로 입력 받은 x와 y의 값으로 객체를 만들게끔 메소드를 바꾼다.
실질적인 계산은 전부 M에서 하며
프로그램 컨트롤은 C에서 처리 한다.
그리고 M에서는 저 출력을 하는게 아니란다 단지 확인용이다.
이렇게 결과를 보내줄 클래스를 또 만들고
아까 전 메소드를 통해 객체로 만들어준다.
그리고 V에서 출력기능 만들고
C에서 출력한다.
혼자하면 무슨 뻘짓인가 싶겠다만 회사에서는 이런식으로 일을 한단다.
이제 이 메커니즘으로 층별 정보 추가를 해보자.
클래스를 만들던 중 강사님이 말씀 하셨다.
MVC 패턴 중에는 DAO와 DTO가 있단다.
DAO(Data Access Object) : M에서 DB관련 작업 해서 붙혀진 이름.
DTO : 데이터 주고 받을 때 쓰는 객체.
몇 관 :
몇 층 :
뭐 :
----------
정보추가
이런식으로 만들어야한다.
연결을 만드는 중이였는데 이런식으로 가면 한명의 이용자가 홈페이지에 들어와서 나갈 때 까지 DB와 계속해서 연결이 되는건데 그렇게 하면 다른 이용자가 사용을 못한다. 그렇기 때문에 어떤 하나의 작업을 할 때 마다 연결 하고 끊어주는 식의 소스를 만들어야 한다. 쉽게 말해서 한 메소드에 저 기능을 다 합쳐야 한다.
C - 일 시키기
V - 콘솔 값 받기
V - 입력 받은 값 저장할 곳(DTO)
M - 값 처리
대공사가 될줄 알았는데 생각보다 할만했다.
마지막에 누구 맘대로 M에서 성공을 출력하냐 하셨다.
이렇게 return으로 바꿔주고 파이널 처리를 해줘야 클로즈 작업이 먹힌다.
이번엔 콘솔창에서 값을 입력 받는게 아니라 바로 M한테 값을 주는 방식으로 해보란다.
입력 받을 값은 없지만 콘솔 출력 기능은 써야 하기에 객체 생성은 해준 뒤에 print 기능으로 select에서 뽑힌 String을 출력해준다.
M에는 select 기능 메소드를 하나 더 추가한다.
while 문으로 바로 출력하면 편하겠지만 협업을 한다고 생각하면 이 String 값을 Java는 쥐뿔도 모르는 디자이너님에게 드려야 하기에 최대한 알아보기 간편하게 result 변수에 저장하고 그 값을 return 해준다. 만들면서 와 이거 좀 잘했는데? 싶기도 하고 같이 있던 사람들 끼리 더 고칠 거 없나 찾아봐도 안 나오길래 만족했었다.
근데 강사님 설명 들을 때 String += 하면 난리난다고 하지 말라했는데 기억은 할지 모르겠다고 해서 아주 뒤통수가 얼얼했다. 그리고 나온 것이 StringBuffer이다.
스트링에 글 추가할 일 있으면 앞으로 StringBuffer를 써야 된다는걸 기억하자.
이제 배달 어플 DB를 만들고 이용해 보자 하셨다.
배민
1. 매장등록
2. 메뉴등록
3. 매장조회
4. 메뉴조회
.....
10. 종료
------------
뭐 : 1
매장이름 :
번호 :
등록완료 뜨면서 등록 됨. 그리고 다시
------------
1. 매장등록
2. 메뉴등록
3. 매장조회
4. 메뉴조회
.....
10. 종료
테이블은 이렇게 2개만 만들어서 매장과 메뉴 1 대 다 관계로 만들어줬다.
목록이 출력 되고 입력한 번호를 int로 받아서 메인으로 return 시킨다.
메인에서는 받아온 int 값이 종료 숫자가 아니라면 등록 후 다시 리스트가 뜨게끔 반복문을 만들어 주고 각 번호에 따른 기능을 불러올 else if 들을 만들어준다.
입력 받아온 번호에 따라서 더 입력 받아야할 값이 있기에 그 입력 받은 값을 ShopInfo라는 객체로 만들어 주는 메소드를 만든다.
BaeminDAO 객체를 singletern pattern을 적용시켰는데 지금 당장엔 크게 상관 없지만 추후에 페이지 단위로 조회를 하기 위해 DAO객체에는 꼭 해줘야 하는 작업이라 하셨다.
1번 기능 구현을 위한 메소드 regShop
안쪽 괄호 부터 풀이하자면, 입력 받아온 번호가 1번일 경우 사용자가 추가로 입력해야할 값을 받기 위해 콘솔창에 매장이름, 번호를 출력하고 입력 받은 값을 객체로 만든다.
그 만든 객체를 DAO객체의 regshop에 넣어서 필요한 값을 등록한 후 성공 했다면 성공을, 실패했다면 실패를 단어로 return해주고 그 값을 다시 V 객체에 있는 printResult 기능을 통해 출력한다.
나머지 2, 3, 4 기능도 결국 비슷한 원리로 돌아가는 것이기에 설명은 생략하겠다.
'비전공자의 코딩 일지 > 학원 수업 정리' 카테고리의 다른 글
코딩 학원 25일차(Java 마무리, HTML 기초) (0) | 2022.07.11 |
---|---|
코딩 학원 24일차(MVC 패턴, Json과 SQL) (0) | 2022.07.09 |
코딩 학원 22일차 (Java + Oracle DB) (1) | 2022.07.06 |
코딩 학원 21일차 (Oracle DB, SQL기초) (0) | 2022.07.05 |
코딩 학원 20일차 (Oracle DB, SQL 기초) (0) | 2022.07.04 |