드디어... 이게 왔구나... SOLID 5원칙과 다형성...
LSP의 요약은 '하위개념은 상위개념으로 치환될 수 있어야 한다' 이다.
-> 계층화, 조직도에 대한 부분을 생각해보자.
'자식 클래스' is a kind of '상위 클래스'
'구현, 구체' is able to '인터페이스'
포유류 향유고래 = new 고래();
이런 식으로 표현할 수 있다. 그러나, 만약 향유고래는 젖을 먹이지 않는 개체라고 해보자.
그리고 포유류는 젖을 먹인다는 속성을 기본적으로 가지고 있고. 이럴땐 어떻게 할 것인가?
GoF의 디자인 패턴
Spring 할때 처음부터 깊게 파려고 하지 말것
가장 중요한 것 -> 무엇보다 흥미. 재미있어야 한다.
1. 흥미 - 오 재밌다 이게 뭐지?
2. 호기심 - 오 신기하다! 또 다른거 있나?
3. 호승심? 오기? 끈기? - 오 에러가 미친듯이 터진다. 앜 잠이 안와! 나 이거 트러블 슈팅 할때까지 안잔다.
성향을 파악하는게 맞다. 끝까지 해낼수 있느냐가 가장 중요.
어디에 중심, 전문성을 둘건지 미리 정하는게 가장 중요!
처음부터 이해하려고 하지 말고, 일단 따라해보면서 익혀라.
너무 파고들지 말고 적당히 끊을줄 알아야 한다.
Date, Math는 필요없다! 이 부분은 공부 안해도 돼.
JAVA는 끝까지 달려라. 파지 말고 일단 시키는대로 하면서 쭉 갈것. 놓는 순간 하기 싫어진다. JAVA의 기초 끝나면 다음 책 추천해줄것임.
Spring도 끝까지 달려라. 일단 달려. 파지마. 모르면 체크만 해놔. 그리고 나중에 CS 보면서 채워라.
OCP의 예시를 가장 잘 나타낸게 Spring이다. 이게 잘 되어있는게 JDBC임.
기본문법 외우는 식으로 하지 말고, SOLID를 생각하면서 만들것.
계산기 싫으면 자동차라도 만들것. 예시를 계속 만들어봐라. 배운걸 계속 적용해볼것.
이해 안된다고 자꾸 파려고 하지 말것.
Spring은 8080 포트가 기본. 톰캣 -> 자바로 만든 애. 뭐 그런게 있어. 톰캣이 뭐지? 하지마.
JAVA -> C(포인터, 메모리 중요!) -> C++ 이렇게 넘어가면 된다.
CS에서 가장 중요한거 순위 꼽자면 무조건 네트워크가 1등임. 제일 효율이 좋기 때문. 그리고 Spring에도 가장 도움이 많이 된다.
사실 OS와 하드웨어 지식 없으면 어려울 수 있는데, 미친척하고 그냥 달려라. 네트워크 먼저 끝내고 그 외에는 순서 자유.
항해 끝날때 내가 가져야 할 수준:
1. JAVA 기초 끝나있고
2. CS중 네트워크 끝나있고
3. Spring은 일단 시키는거 할 수 있는 상태
Spring 할때 CS 아는데도 이해 못하는게 있다면 -> JAVA의 문제임. SOLID랑 객체지향 문제임.
자바를 빨리 끝내고 디자인 패턴까지 보는게 좋음.
JAVA: with 객체지향 -> 디자인패턴
CS: 최소 네트워크는 봐놔야 한다.
JAVA 라이브러리 중에 객체지향 잘 지킨 구조가 있다. 컬렉션 프레임워크.
객체지향 잘돼있는걸 바깥에서 찾으려고 하지 마라. JAVA 내부에서 찾는게 가장 좋다.
Map과 List는 다른걸 상속받는다. 컬렉션 프레임워크 보려면 제네릭스 보고 봐라. 왜냐면 <K, V>가 제네릭스이기 때문. -> 이건 남궁성 센세꺼 들어.
그리고 이 다형성, 유연성에 제네릭스가 크게 한몫 한다.
wrapping도 봐야한다. unboxing boxing 개념.
너무 멀리서 찾지 말것. 내부 코드를 볼것. Spring도 마찬가지. 아니면 자바나 스프링 만든사람 깃헙 가보거나.
-> 예외처리는 말할 것도 없다. 너무 중요하다.
스프링 내부코드는 제네릭스로 도배되어있다. 제네릭스 모르면 스프링도 못한다.
List가 굳이 interface를 가져가는 이유? -> 다형성 때문.
중간에 분리되는 부분을 추상클래스로 분리하고. 그래서 객체지향적으로 설계했구나. 쓰기 편하라고.
자바는 언어가 객체지향이기 때문에, 자료구조도 객체지향적으로 설계해놨다.
파지마! 제발 파지마. 밑으로 파지만 마!
몸 세개로 분리해서 달리자. JAVA, Spring, CS공부로.
네트워크는 그림그려져있는 쉬운책 볼것. 원빈 멘토님이 책 추천해 주실것임.