[IT국비지원] 개발자 교육 17일 차 : JAVA(2023.08.18)fit.구디아카데미,김지훈 강사님

Nicole Gold·2023년 8월 18일
0

K-digital training

목록 보기
18/60

이하 구디아카데미 김지훈 강사님의 수업자료와 강의 내용 정리, 실습한 내용을 정리함!

JSP 를 거쳐서 다시 돌아온 JAVA!

디자인 패턴

디자인 패턴의 정의

  • 설계 문제에 대한 해답을 문서화하기 위해 고안된 방법
  • 소프트웨어 개발 과정에서 자주 나타나는 과제를 해결하기 위한 방법
  • 패턴은 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 준다.

패턴 사용 시 주의 사항

  • 디자인 패턴은 일반적으로 대규모 프로그램 개발에 적합하다.
  • 각 디자인 패턴이 유용한 상황에 대해 잘 알아야 한다.
  • 패턴은 절대적이지 않다.(상황에 맞게 유연하게 변형이 가능하다.)

MVC 패턴(Model2)

  • MVC Pattern 은 Model View Controller의 약자로 애플리케이션을 세 가지의 역할로 구분한다.
  • 각 파트는 자신이 맡은 역할을 수행한다.

JSP 와 MVC 의 비교


Basic MVC Patten

  • 기본적인 MVC 구조로 jsp 와 Java 를 분리해 보자
  • 우선 View(jsp) 에서 보내는 내용을 Controller(java) 에서 받을 수 있는 기능이 필요하다.
  • Jsp 에서 하던 서버의 기능을 이제 JAVA 에서 해야 한다.
  • 그런 기능을 만들기 위해서는 많은 코드가 필요하다.

상속(inherit)

  • JAVA 에서는 다른 소스를 가져다 쓰기 위한 두 가지 방법이 있다.
  • 객체화(instance) 와 상속(inherit) 이다.
  • 상속은 부모의 것을 내 것처럼 사용하는 개념이다.
  • 상속은 OOP 4대 특징 중 하나이다.
  • 상속을 하는 이유는 다음과 같다.




설치 과정

  • 입력 창에 HttpServler 입력
  • 알트+쉬프트+S

  • 상속을 위해서는 extends 라는 키워드를 사용 한다.

  • HttpServlet 을 상속받는 MainController 클래스를 만들어 보자

  • MainController

  • 퍼블릭 클래스인 MainController 는 HttpServlet을 상속한다.

  • alt+shift+S -> Override/Implement method - > goGet, doPost 메서드 override

  • doGet 메서드 실행 시 "GET 방식 요청" 시스템에 출력

  • doPost 메서드 실행 시 "POST 방식 요청" 시스템에 출력


  • 부모님이 상속해 주겠다는 것만 받을 수 있는 것처럼 부모클래스에서 private 접근 제한자를 갖는 멤버는 상속이 불가능하다.

  • java 에서 상속은 상속받을 class 를 선택한다.

  • Java 에서는 c++ 과 달리 다중 상속을 허용하지 않는다.

  • class 는 분류의 의미를 가지고 있기 때문에 두 분류를 동시에 가질 수 없다.

요약

  • 부모 클래스를 상속하면 부모의 기능을 자식이 사용할 수 있다.
  • 상속을 통해 누군가가 만들어 놓은 기능을 상속해서 내 것처럼 쓸 수 있다.
  • 상속받을 경우 extends 키워드를 사용한다.
  • 상속은 한 번에 한 클래스만 받을 수 있다.

객체화로도 남의 기능을 쓸 수 있는데 상속과의 차이는 무엇인가?

  • index(view 영역 출력)
  1. calc 에 내용 전송하는 폼 생성/매서드는 포스트 타입
  2. text 입력할 수 있는 란 생성/호출 이름은 su1
  3. 선택할 수 있는 입력 란 생성/ 호출 이름은 oper
    • 선택 옵션은 +/-/*/ /(나누기)/
  4. text 입력할 수 있는 란 생성/호출 이름은 su2
  5. 계산이라고 쓰인 버튼 생성



  • clacController(요청 확인 및 지시)
  1. /calc 입니다.
  2. 퍼블릭 클래스 calccontroller 는 HttpServlet를 상속받는다.
  3. post 요청이 와서 doPost 메서드 동작함
  4. su1의 값을 받아와서 su1 변수 선언
  5. su2의 값을 받아와서 su2 변수 선언
  6. oper의 값을 받아와서 oper 변수 선언
  7. Calculator 한테 일을 시키고 객체화해서 cal에 받아온다.
  8. cal의 메서드는 su1, su2, oper를 매개변수로 받아와서 int 값 result를 뱉는다.
  9. su1/oper/su2=result를 시스템에 출력한다.


  • Operator~4(calculator 를 수행하기 위해 필요한 연산자 클래스)



  • Operator 는 Operator2 를 상속받고 Operator2 는 Operator3을 상속받고 Operator3 은 Operator4 를 상속받음 = Operator 에는 2~4의 내용이 모두 들어 있음

  • int a 와 int b 를 plus/minus/multi/devide 한 값을 리턴


  • calculation(Operator 를 가져와서 Controller 의 지시를 수행하는 model)

  1. int calculation 은 매개변수 su1, su2, oper 를 받아 아래 본체를 실행한다.
  2. int a 변수에 su1 담음 / int b 변수에 su2 담음 / int 값을 받을 result 변수 선언
  3. Operator 클래스를 객체화 해서 op 에 담음
  4. 객체화 했을 때는 Operator~4 각 클래스를 모두 객체화해서 사용해야 합
  5. 상속받았을 때는 최종 상속받은 Operator 만 받아오면 각 메서드 수행 가능
  6. oper 실행 시 + value 가 "+" 일 때 op 클래스의 plus 매서드 값을 뱉음 / 이하 각 연산 반복


Override

  • 부모의 메서드의 기능이 마음에 들지 않거나 아쉬운 경우가 있다.
  • Java 에서도 부모로부터 물려받은 method 를 튜닝할 수 있다.
  • 우리는 그것을 Override 라고 한다.

오버로드 : 과적
오버라이드 : 상속받은 것에 올라타거나 튜닝하는 것

  • 둘의 가장 큰 차이점은 상속관계이냐 아니냐의 차이이다.
  • 오버라이드는 상속관계에서만 일어난다.


  • index(veiw 영역)
  1. ./car 에 입력한 내용을 보내는 폼 생성/ 매서드는 get
  2. 선택창 생성 / 호출 이름은 action
  3. 선택 종류는 start(시동 건다) / run(달린다) / stop(멈춘다) / test(정비한다)
  4. 실행 버튼
  5. msg 출력



  • MyCar(실제 일을 수행하는 model)


1. 퍼블릭 클래스 MyCar 는 ParentCar를 상속받는다.
2. 주석처리된 부분 : run 메서드는 "시속 150km 로 달린다." 를 뱉음.
3. 블린 변수 turbo 는 false
4. run 메서드 실행 > 만약 turbo 가 false 와 같으면 부모 메서드 run 을 그대로 실행하고 아니면 "시속 200km 로 달린다" 뱉음


  • ParentCar(MyCar 의 부모)


1. 퍼블릭 클래스 ParentCar는 아래 메서드 실행
2. start 메서드는 "시동이 걸린다." 뱉음
3. run 메서드는 "시속 50km 로 달린다." 뱉음
4. stop 메서드는 "멈춘다" 뱉음
5. 자식 클래스에서 수정이 불가능한 test 메서드는 "자체 점검 실행..." 뱉음



  • MainController(view 에서 요청을 받아 model 에 전달)
  1. /car 입니다.
  2. 퍼블릭 클래스 Maincontroller 는 HttpServlet 을 상속받는다.
  3. doGet 메서드 실행
  4. "action"의 값을 가져와서 action 변수에 넣는다.
  5. 시스템에 action 출력
  6. MyCar 클래스를 객체화해서 car 에 담는다.
  7. 오는 문자열을 result 변수에 넣는다.
  8. action 이 스위치 될 때 아래 케이스별 실행
  9. start 호출 시 car 클래스의 start 메서드 값을 result 에 담는다.
  10. run 호출 시 car 클래스의 turbo 가 true 면 car 클래스의 run 메서드 값을 result 에 담는다.
  11. stop 호출 시 car 클래스의 stop 메서드 값을 result 에 담는다.
  12. test 호출 시 car 클래스의 test 메서드 값을 result 에 담는다.
  13. result를 시스템에 출력
  14. 보낼 값을를 세팅한다. msg 속성에 result 값을 담는다.
  15. index.jsp에 값을 보낸다. dis 에?
    RequestDispatcher 란 현재 request에 담긴 정보를 저장하고 있다가 그 다음 페이지 그 다음 페이지에도 해당 정보를 볼수있게 계속 저장하는 기능.
  16. req 값과 resp 값을 dis(index.jsp) 로 전송한다.

요약

  • 상속을 받으면 내 것처럼 사용할 수 있다.
  • 즉 부모 기능을 사용하기 위해 부모를 객체화하지 않아도 된다.
  • 상속받은 메서드를 내 마음대로 바꿔 쓸 수 있다.(override)
  • 단 읽기 전용인 final 키워드가 있는 메서드는 불가능하다.



추상화

  • 추상화(Abstract)는 OOP 의 4대 특징 중 하나이다.
    • Encapsulation : 다른 사용자에게 데이터 입/출력을 제한한다.
    • Inheritance : 나에게 없는 기능을 부모에게 받아서 내 것처럼 쓴다.
    • Abstraction : ?
    • Polymorphism : ?
  • 추상은 실체 간에 공통되는 특성을 추출하고 불필요한 정보를 제거해 단순화시키는 것이다.
  • 추상클래스는 추상 메서드로 꼭 구현해야 하는 메서드 등의 규격을 만들 수 있다.
  • 실체 클래스(concrete class) 는 추상 클래스(abstract class) 를 상속한다.
  • 추상화 class 및 method 를 선언하기 위해서는 abstract 라는 키워드를 붙여야 한다.
  • 둘은 상속 관계이기 때문에 추상화 클래스의 기능을 실체 클래스에서 사용 할 수 있다.
  • 추상 메서드(abstract method) 를 통해 꼭 구현할 메서드를 override 할 수 있다.


추상 클래스

  • 추상 클래스를 상속받으려면 규격이 필요하다(ex.HttpServlet 에서의 doGet, doPost)
  • 예시와 같이 해당 클래스를 사용하기 위해 반드시 필요한 부분을 추상 클래스에서 규격화한다.


추상 메서드

  • abstract method 는 형태만 있고, 그 몸체는 없는 메서드를 말한다.
  • abstract method 는 특정한 메서드를 강제로 override 해야 할 경우 설정해 준다.
  • ex. RPG 게임에서 클래스 추가 시
    • 모든 클래스(직업)은 스킬 사용, 아이템 사용 기능이 필수로 있어야 한다.
    • Jump 기능은 클래스별로 차이가 없다.
    • 모든 클래스는 skill() 과 useItem() 은 반드시 구현해야만 하는 상황이다.
    • 이때 abstract method 를 활용하면 override 를 통해 만들어야 할 기능을 강제할 수 있다.



  • StandardModel(추상 클래스)
  1. 퍼블릭 추상 클래스 StandardModel 은 아래 메서드를 실행한다.
  2. jump 메서드는 job을 매개변수로 써서 job+가 점프한다 고 뱉는다.(실행문이 있는 일반 메서드)
  3. skill 메서드는 매개변수가 job인 추상 메서드(실행문 없음)
  4. useItem 메서드는 매개변수가 job 인 추상 메서드(실행문 없음)


  • Tanker / Dealer / Healer (추상 클래스를 상속받는 자식 클래스)


  • 강제적으로 skill 과 useItem 이 Override 된다.

요약

  • 추상화는 공통되는 특징을 추출하여 단순화 시키는 작업이다.
  • 추상 클래스는 abstract 키워드를 사용한다.
  • 추상 클래스는 자식 이외에는 객체화시킬 수 없다.
  • 추상 클래스를 상속받으면 추상 메서드를 강제로 overide 하게 된다.
  • 이 과정을 통해 꼭 필요한 메서드를 만들어 규격화 시킬 수 있다.

  • 어려운 듯 쉬운 듯한 추상화 개념😁
profile
JAVA 개발자로 가는 길

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

글 재미있게 봤습니다.

답글 달기

관련 채용 정보