[항해99] TIL - JAVA 5일차. SOLID 원칙과 다형성.

LIHA·2023년 1월 26일
0

항해99

목록 보기
25/54
post-thumbnail

드디어... 이게 왔구나... SOLID 5원칙과 다형성...

SOLID 5원칙 - 다형성, 확장, 캡슐화를 잇는 원칙

  • 객체지향을 위해 이걸 알아야 하고, 이걸 위해 객체지향을 알아야 한다.

1/28 (토) 원빈 멘토님의 SOLID 보충강의 세션

OCP - 자신의 확장에 대해서는 열려있고, 주변의 변화에 대해서는 닫혀있다

LSP - 소프트웨어의 상속은 '분류'에 더 가깝다.

LSP의 요약은 '하위개념은 상위개념으로 치환될 수 있어야 한다' 이다.
-> 계층화, 조직도에 대한 부분을 생각해보자.

'자식 클래스' is a kind of '상위 클래스'
'구현, 구체' is able to '인터페이스'

포유류 향유고래 = new 고래();
이런 식으로 표현할 수 있다. 그러나, 만약 향유고래는 젖을 먹이지 않는 개체라고 해보자.
그리고 포유류는 젖을 먹인다는 속성을 기본적으로 가지고 있고. 이럴땐 어떻게 할 것인가?

GoF의 디자인 패턴

원빈 멘토님의 Spring 조언 - 깊게 파지 말것. 흥미가 제일 우선.

Spring 할때 처음부터 깊게 파려고 하지 말것
가장 중요한 것 -> 무엇보다 흥미. 재미있어야 한다.
1. 흥미 - 오 재밌다 이게 뭐지?
2. 호기심 - 오 신기하다! 또 다른거 있나?
3. 호승심? 오기? 끈기? - 오 에러가 미친듯이 터진다. 앜 잠이 안와! 나 이거 트러블 슈팅 할때까지 안잔다.


◆ 1/28(토) JAVA, Spring 관련 개인 상담 및 조언

성향을 파악하는게 맞다. 끝까지 해낼수 있느냐가 가장 중요.
어디에 중심, 전문성을 둘건지 미리 정하는게 가장 중요!
처음부터 이해하려고 하지 말고, 일단 따라해보면서 익혀라.
너무 파고들지 말고 적당히 끊을줄 알아야 한다.

Date, Math는 필요없다! 이 부분은 공부 안해도 돼.

◆진도는 제발 끝까지, 깊이는 제발 파지마 - 지금 말고 나중에 봐. 지엽에 빠지면X

JAVA는 끝까지 달려라. 파지 말고 일단 시키는대로 하면서 쭉 갈것. 놓는 순간 하기 싫어진다. JAVA의 기초 끝나면 다음 책 추천해줄것임.
Spring도 끝까지 달려라. 일단 달려. 파지마. 모르면 체크만 해놔. 그리고 나중에 CS 보면서 채워라.

◆SOLID와 연결되는 Spring - SOLID 모르면 JAVA, Spring 다 못한다

OCP의 예시를 가장 잘 나타낸게 Spring이다. 이게 잘 되어있는게 JDBC임.
기본문법 외우는 식으로 하지 말고, SOLID를 생각하면서 만들것.
계산기 싫으면 자동차라도 만들것. 예시를 계속 만들어봐라. 배운걸 계속 적용해볼것.
이해 안된다고 자꾸 파려고 하지 말것.

◆나의 희망을 위해서는 -> JAVA -> C -> C++ 순서를 권장

Spring은 8080 포트가 기본. 톰캣 -> 자바로 만든 애. 뭐 그런게 있어. 톰캣이 뭐지? 하지마.
JAVA -> C(포인터, 메모리 중요!) -> C++ 이렇게 넘어가면 된다.

◆CS에서 가장 중요한 것은 네트워크 - 나머진 취향껏 순서대로 공부

CS에서 가장 중요한거 순위 꼽자면 무조건 네트워크가 1등임. 제일 효율이 좋기 때문. 그리고 Spring에도 가장 도움이 많이 된다.
사실 OS와 하드웨어 지식 없으면 어려울 수 있는데, 미친척하고 그냥 달려라. 네트워크 먼저 끝내고 그 외에는 순서 자유.

◆항해 수료시 갖춰야 할 수준

항해 끝날때 내가 가져야 할 수준:
1. JAVA 기초 끝나있고
2. CS중 네트워크 끝나있고
3. Spring은 일단 시키는거 할 수 있는 상태

Spring 할때 CS 아는데도 이해 못하는게 있다면 -> JAVA의 문제임. SOLID랑 객체지향 문제임.

◆권장하는 공부 커리와 진도 상태

자바를 빨리 끝내고 디자인 패턴까지 보는게 좋음.
JAVA: with 객체지향 -> 디자인패턴
CS: 최소 네트워크는 봐놔야 한다.

◆객체지향, 제네릭스, SOLID는 결국 다 연결 - JAVA 개념이 Spring에 그대로

JAVA 라이브러리 중에 객체지향 잘 지킨 구조가 있다. 컬렉션 프레임워크.
객체지향 잘돼있는걸 바깥에서 찾으려고 하지 마라. JAVA 내부에서 찾는게 가장 좋다.

◆Map과 List. 제네릭스, wrapping, 예외처리 - 하나도 놓칠 수 없다

Map과 List는 다른걸 상속받는다. 컬렉션 프레임워크 보려면 제네릭스 보고 봐라. 왜냐면 <K, V>가 제네릭스이기 때문. -> 이건 남궁성 센세꺼 들어.
그리고 이 다형성, 유연성에 제네릭스가 크게 한몫 한다.
wrapping도 봐야한다. unboxing boxing 개념.
너무 멀리서 찾지 말것. 내부 코드를 볼것. Spring도 마찬가지. 아니면 자바나 스프링 만든사람 깃헙 가보거나.

-> 예외처리는 말할 것도 없다. 너무 중요하다.
스프링 내부코드는 제네릭스로 도배되어있다. 제네릭스 모르면 스프링도 못한다.

List가 굳이 interface를 가져가는 이유? -> 다형성 때문.
중간에 분리되는 부분을 추상클래스로 분리하고. 그래서 객체지향적으로 설계했구나. 쓰기 편하라고.
자바는 언어가 객체지향이기 때문에, 자료구조도 객체지향적으로 설계해놨다.

파지마! 제발 파지마. 밑으로 파지만 마!
몸 세개로 분리해서 달리자. JAVA, Spring, CS공부로.
네트워크는 그림그려져있는 쉬운책 볼것. 원빈 멘토님이 책 추천해 주실것임.

profile
갑자기 왜 춤춰?

0개의 댓글