til(11_27)

김태은·2024년 11월 27일

오늘은 자바 spring 강의 기본을 들을 것이다.

입문을 2회독을 생각했지만, 기본을 진행하는 것이 부족한 부분을 채우기에 좋다고 판단했다.

그리고 자바 문법 강의도 들을 생각이다.

어디까지 진행할 수 있을지는 모르지만, 강의를 다듣고 시간이 남는다면, 이전에한 코드 연습을 해보고 싶다....


강의

spring 기본

spring 기본 1회독 ( 1.5배속 )

역시 입문을 1배속으로 들은 탓인지, 1.5배속도 잘 들으면서 강의를 진행할 수 있었다. 다만, 해당 강의는 이전과 다르게 코드를 같이 치면서 진행을 해보았다.

입문 강의에선 전반적인 흐름을 대충 알고, 코드를 작성하니 더 잘 되는 느낌이였다.( 물론 시간이 배로 걸림 )

어째든 오늘의 키워드는
SOLID , 역할 , 구현 , DI , IoC , 컨테이너 , 다형성 , 구성 구역? , 실행? 구역? , config , ApplicationContext , Bean , Configuration 정도가 생각난다.

강의를 듣고 전반적인 흐름은 SOLID를 지키면서 코드를 짜는 것이 상당히 어려운데, 다형성이라는 java의 특징? 을 베이스로 구현 부분과 역할 부분을 나누어 간섭없이 설계하고, 구현체를 끼워맞춰주는 친구를 두어 이쁜 객체 지향 설계를 할 수 있게 끔 하자!

이때 도와주는 친구가 spring이 그중 하나이고, 코드를 더 이쁘게 작성하도록 도와준다?

흠...

그래도 비슷한 개념을 두번 들으니, 들리는 것이 많아지는 모양이다. 우선 객체지향 설계 5가지 SOLID 는 중요 개념이라 '김영한' 강사님이 말씀을 하셔서, 키워드 뿐 아니라 강의를 들으며, 조금씩 적어두었다.

SOLID

* 로 중요도 표시!

* 1. SRP 단일 책임 원칙

  • 한클래스는 하나의 책임만 가져야한다 < - 여기서의 책임은 내가 생각하는 책임과는 조금 다른 느낌이다. 기능보다는 큰 개념인듯 하다... 공부가 더 필요해보인다. -메모-
  • 변경이 있을 때, 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것
    < - 의존이 적은? 그런 느낌인듯? 하다.

*** 2. OCP 개방 폐쇄 원칙

  • 확장에는 열려있고, 변경에는 닫혀있다.
    - > 다형성을 바로 이용하면 될 거 같지만! < - 인터페이스를 상속받는 애들!
    - > 요 애들을 갈아서 끼울 때, 변경에 열린 모습을 보인다(위배!)!
    - > 그래서 갈아끼워주는 역할의 객체를 만들어 줘야한다.
    < - 스프링이 갈아끼워주는 역할도? 한다 - 해당 부분은 아직 잘 모르겠다. 강의를 더 진행해 봐야 알 것이다. - 메모 -
    ->> 그러면 변경이 없이 가능하게 끔 된다!

- 물론, 스프링 없이도 가능은 하다. 구성만 담당하는 클래스를 만들어주면 된다.

  1. LSP 리스코프 치환 원칙
  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위타입의
    인스턴스로 바꿀수 있어야한다.
    -> 자동차를 보면 액셜이라는 기능은 앞으로 간다 의 역할인데
    이걸 뒤로가게끔 만들면 x 안된다라는 뜻
    만약, 천천히 앞으로 간다? 이런 액셀은 앞으로 간다 의 의미이므로
    lsp 를 잘 지켰다고 볼 수 있다.
    ->> 그냥 해당 기능에 맞는 행동을 해야한다! ? 정도로 이해를 하고 넘어갔다. - 메모 -

3.ISP 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 인터페이스를 분리하자!
  • 클라이언트가 하나로 사용자만 존재한다면,
  • 하나로 통합된 인터페이스(자동차 - 운전기능, 정비기능 등이 있는..)
    만 있을 시, 정비(기능)에 관한 기능의 변경이 있을 시, 사용자 클라이언트를 다 고쳐야한다.
    -> 만약 인터페이스를 분리하게 된다면?
    클라이언트가 사용자와 정비사로 나눌 수 있고, 어떤 기능에서 변경이 일어났을 때,
    관련 클라이언트만 고치면 된다.

ps 클라이언트도 결국 인터페이스 같은 것! 난 이렇게 이해함

Q 도입부에서 말한 특정 클라이언트라는 말이 맞지 않는거 같다.

*** 5. DIP 의존관계 역전 원칙
-프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다!
-> 클라이언트가 구현체를 보지말고, 인터페이스만을 보게끔!!
-> 인터페이스(역할)의 구현체(내부 구현체)에 대해 몰라도 되게끔!!

잘못된(위배된) DIP : 클라이언트가 구현 클래스를 선택 - 의존 <- 알고있다.

ps 의존한다 == 알고있다

객체지향의 핵심은 다형성
다만 다형성만으로는 OCP DIP 를 지킬 수 없다!
그래서 먼가가 필요하고! - > 스프링 ( 스프링 외에도 다른 방법이 있다. )

느낀점 - 인터페이스가 중요!
인터페이스를 잘 짜야 후에 다른 클라이언트(사용자) 혹은 서버 가 와도
잘 끼워서 제 역할을 할 수있다!!

ps
해당 강의를 다 듣지도 못했는 데, 하루가 갔다...

계획은 다 이루어지는 않는다.

김영한 님 강의



회고

오늘은 spring 기본을 들었다.

나는 java에서 캡슐화가 제일 중요 포인트인 줄 알았는 데( 사실 캡슐화가 더 머리로 상상하기에 더 괜찮아보였다. 다형성을 맛보기엔 java 문법으로는 한계가 있었던거 같다. ), 또 하나 배워간다.

그리고 하고 싶은 것이 생겼다. 우선 요번에 제출한 키오스크 과제를 spring 으로 만들어보는 것

해야할 것이 많지만, 해당 강의만 수강하고, 요번주는 spring 으로 나만의 과제를 만들어 도전할 것이다.

알게 된 것

단축키

f2 - 오류난 곳으로 바로 이동

ctrl + shift + t - 현재 선택된 클래스나 메서드와 관련된 테스트 코드 생성 및 이동

profile
Spring_4

0개의 댓글