3주차 중에 언어주학습 주차가 끝나고 알고리즘 주차(프로그래밍 기초)로 들어오니, 새삼 위기감이 엄습했다.
고등학생때 못해서 포기하다시피 한 이과수학이 이렇게 15년쯤 뒤 새삼 내 발목을 붙잡는 기분이란! 흑흑.
(↑ 최근의 디폴트 상태. '이게 뭐지...? 뭔말이지...? 내가 똥멍청이인가? 머리가 나쁜가?' 라는 생각 중)
그러니 일단 회고 전에, 원빈 멘토님의 핵심 조언 한개만 미리 빡 박아놓고 가자.
-> 프로그래밍 언어도 언어. 언어의 기본속성은 '약속' = '이렇게 쓰자' 임.
'왜?' 가 아니야. '저렇게 쓰나보다' 임.
-> 왜? 를 고민하면 답도 못 구하는데 시간만 왕창 쓸 뿐더러,
결국 제임스 고슬링한테 물어야 함(...)
-> 언어는 기본적으로 '그렇게 쓰자고 약속했기 때문에 그렇게 쓰는것'임.
객체지향이 왜 중요한가?
학습적 관점: 필요한 것만 가져다 쓰려고. 재사용성, 유지보수, 중복제거를 위해서.
= 요소 한개 수정하려고 코드 전역에 걔 들어간 곳 다찾아서 고치는 짓 안 하려고
= 한번 만들어놓은거 조금만 수정해서 여기저기다 다시 갖다쓸 수 있게 하려고
= 같은코드 무한복붙 노가다 없이 간결하게 쓰고, 코드관리도 쉽게 하려고
(HTML 쓰는것처럼 .css 파일만, .js파일만 고치면 되니까)
개인적 관점: 내가 원하는 언리얼엔진 프로그래밍 배워서 게임 만들려면 이거 알아야함.
C++ 기반이라고 절차지향일거라 방심했냐 휴먼? 블루프린트 쓰고싶으면 결국 다 알아야 한다.
인스턴스는 너무 중요한 것!
생성자가 없으면 일회용, 생성자가 있으면 다회용이라고 생각해두자.
JAVA의 이념이자 슬로건 - Write once, Run anywhere
C 계열 언어 이후로 혜성처럼 나타난 JAVA의 가장 큰 장점 중 하나는,
JVM이라는 가상머신을 통해서 어떤 OS에서도 코드가 똑같이 동작하도록 설계되어 있다는 점.
-> 그 전에는 다른 OS(Linux 같은) 에서는 코드가 동작하지 않거나, 의도와 다르게 동작했었다.
JRE와 JDK에 대해 알려준 블로그
언어주차 TIL에 기술매니저님이 JAVA 8의 차이점 공부하라는 팁을 기록한게 생각났다
개인적으로 Doker가(사실은 쿠버네티스가) 궁금해 알아보다가 JVM 아녀? 라는 느낌을 받았던 기억이 난다.
예전 CS관련지식 정리글
컨테이너 -> JVM처럼 어떤 OS에서도 프로그램이 돌아가도록 해주는 격리 기술
(지게차 팔레트)
컨테이너 런타임(CR) -> 그 컨테이너를 다루는 도구. Doker는 그 CR중에 가장 유명한 것
도커라고 하니 클래스, 메서드 이런 느낌이지만 사실은 크롬, 엣지 이런 명칭이었던 것
(지게차. 도커는 1등 브랜드(도요타))
쿠버네티스 -> CR을 통해 컨테이너를 오케스트레이션 하는 도구
※오케스트레이션: 여러 서버에 걸친 컨테이너 및 사용 환경 관리
(팔레트 관리용 지게차 관제센터)
대강 이렇다. 하지만 JVM과 컨테이너는 엄연히 다른 개념이니 동일시는 하지 말것.
'OS에 상관없이 동일하게 동작하기 위해 만든 도구' 라는 부분에서 비슷한 느낌임. 그 느낌용으로 볼것.
이래에 부록겸으로 JAVA 8에서 나온 람다 스트림이 뭔지 가볍게 정리해 보았다.
람다 스트림이 뭔데요? -> 클래스 인스턴스 메소드 이렇게 말하듯 '람다' 하고 '스트림'을 말하는 것.
람다? '람다식' 이라고 부르는 일종의 식(expression).
자바에서도 함수형 프로그래밍을 가능하게 해준 표현법.
이 식을 쓰면 메소드의 이름을 쓰지 않도 되기 때문에, 람다를 '익명 함수'의 한 종류로 봄.
출처 블로그
스트림? 컬렉션 데이터를 선언형으로 처리할 수 있게 만든 기술. 참고 블로그
데이터의 흐름을 다루기에 이름이 '스트림'. 람다를 사용할 수 있는 기술 중 하나.
가장 큰 장점 -> 배열과 컬렉션을 함수형으로 처리할 수 있다는 것!
즉, JAVA에서도 SQL문처럼 데이터를 다루기 위해 탄생한게 스트림. (전에 SQL 한번 해봤다고 새삼 반가움)
-방대한 데이터를 무한 for문 돌리지 않고 내가 원하는 것만 딱 꺼내올 수 있기 때문에 큰 장점.
-쓰레드를 이용한 병렬 처리로 빨리 작업할 수 있다는 것도 장점.