[항해99] 3주차 WIL - 객체지향과 JVM, 그리고 언젠가 만날 Doker에 대해

LIHA·2023년 1월 29일
0

항해99

목록 보기
28/54

3주차 중에 언어주학습 주차가 끝나고 알고리즘 주차(프로그래밍 기초)로 들어오니, 새삼 위기감이 엄습했다.

  • 코테를 하는데 이걸 풀 알고리즘이 전혀 생각나지 않거나 (=푸는 방법 모름)
  • 그 알고리즘을 떠올리는 고민에 시간이 아주 오래 걸렸고
  • 실수가 아주아주아주 많아서 또 시간이 오래 걸렸다 (월별 요일계산을 틀린다거나)

고등학생때 못해서 포기하다시피 한 이과수학이 이렇게 15년쯤 뒤 새삼 내 발목을 붙잡는 기분이란! 흑흑.

(↑ 최근의 디폴트 상태. '이게 뭐지...? 뭔말이지...? 내가 똥멍청이인가? 머리가 나쁜가?' 라는 생각 중)
그러니 일단 회고 전에, 원빈 멘토님의 핵심 조언 한개만 미리 빡 박아놓고 가자.

  • 진도는 제발 끝까지, 깊이는 제발 파지마 - 지금 말고 나중에 봐.
    -처음부터 이해하려고 하지 말고, 일단 따라해보면서 익혀라.
    '저렇게 쓰는건가보다' 생각하기 연습.
    -너무 파고들지 말고 적당히 끊을줄 알아야 한다.
    '이게 뭐지?'-> 괜찮음, '이거 왜 이렇게 되지?' -> 멸망

-> 프로그래밍 언어도 언어. 언어의 기본속성은 '약속' = '이렇게 쓰자' 임.
'왜?' 가 아니야. '저렇게 쓰나보다' 임.
-> 왜? 를 고민하면 답도 못 구하는데 시간만 왕창 쓸 뿐더러,
결국 제임스 고슬링한테 물어야 함(...)
-> 언어는 기본적으로 '그렇게 쓰자고 약속했기 때문에 그렇게 쓰는것'임.


이번주 학습 테마1 - 객체지향 c̅ SOLID 5원칙

객체지향이란 대체 무엇이란 말인가(ft. 절차지향)

  • 객체지향은 내가 필요한 객체(말이 어려우니 오브젝트라고 하면 편할 것)만 끌고와서 쓰는 등의 관계를 맺는 것.
    C와 JAVA가 가장 다른게 객체지향. (C는 절차지향)
    절차지향인 C는 그냥 위에서부터 한줄한줄 컴파일 하기때문에 그런게 없다. 메모리도 free() 써서 내가 알아서 시스템에 반환해줘야 함.
    참고 - C++은 둘의 중간에 있다. 절차지향으로도 객체지향으로도 쓸 수 있음. C#부터는 완전 객체지향으로 분류.


(출처 - Coloso UE4 프로그래밍 강의)

객체지향이 왜 중요한가?

  • 학습적 관점: 필요한 것만 가져다 쓰려고. 재사용성, 유지보수, 중복제거를 위해서.
    = 요소 한개 수정하려고 코드 전역에 걔 들어간 곳 다찾아서 고치는 짓 안 하려고
    = 한번 만들어놓은거 조금만 수정해서 여기저기다 다시 갖다쓸 수 있게 하려고
    = 같은코드 무한복붙 노가다 없이 간결하게 쓰고, 코드관리도 쉽게 하려고
    (HTML 쓰는것처럼 .css 파일만, .js파일만 고치면 되니까)

  • 개인적 관점: 내가 원하는 언리얼엔진 프로그래밍 배워서 게임 만들려면 이거 알아야함.
    C++ 기반이라고 절차지향일거라 방심했냐 휴먼? 블루프린트 쓰고싶으면 결국 다 알아야 한다.

인스턴스는 너무 중요한 것!
생성자가 없으면 일회용, 생성자가 있으면 다회용이라고 생각해두자.


학습테마 2 - JAVA 하면 떠오르는 JVM

JVM이 뭐에요? -> 자바 코드가 어느 환경에서도 똑같이 동작하도록 해주는 것

JAVA의 이념이자 슬로건 - Write once, Run anywhere

C 계열 언어 이후로 혜성처럼 나타난 JAVA의 가장 큰 장점 중 하나는,
JVM이라는 가상머신을 통해서 어떤 OS에서도 코드가 똑같이 동작하도록 설계되어 있다는 점.
-> 그 전에는 다른 OS(Linux 같은) 에서는 코드가 동작하지 않거나, 의도와 다르게 동작했었다.

  • 참고 : JVM 관련하여 JRE와 JDK가 있는데, JDK ⊃ JRE ⊃ JVM 이라고 보면 된다.
    자바 버전이 8이니 11이니 하는 건 이 JDK 버전을 말하는 것.

JRE와 JDK에 대해 알려준 블로그
언어주차 TIL에 기술매니저님이 JAVA 8의 차이점 공부하라는 팁을 기록한게 생각났다

흰 천.. 아니고 JVM만 있으면 어디서든 돌아갈 수 있어(ft. Doker?)

개인적으로 Doker가(사실은 쿠버네티스가) 궁금해 알아보다가 JVM 아녀? 라는 느낌을 받았던 기억이 난다.
예전 CS관련지식 정리글

컨테이너 -> JVM처럼 어떤 OS에서도 프로그램이 돌아가도록 해주는 격리 기술
(지게차 팔레트)
컨테이너 런타임(CR) -> 그 컨테이너를 다루는 도구. Doker는 그 CR중에 가장 유명한 것
도커라고 하니 클래스, 메서드 이런 느낌이지만 사실은 크롬, 엣지 이런 명칭이었던 것
(지게차. 도커는 1등 브랜드(도요타))
쿠버네티스 -> CR을 통해 컨테이너를 오케스트레이션 하는 도구
※오케스트레이션: 여러 서버에 걸친 컨테이너 및 사용 환경 관리
(팔레트 관리용 지게차 관제센터)

대강 이렇다. 하지만 JVM과 컨테이너는 엄연히 다른 개념이니 동일시는 하지 말것.
'OS에 상관없이 동일하게 동작하기 위해 만든 도구' 라는 부분에서 비슷한 느낌임. 그 느낌용으로 볼것.

이래에 부록겸으로 JAVA 8에서 나온 람다 스트림이 뭔지 가볍게 정리해 보았다.


JVM 나온김에 JAVA 8 공부 - 자바 버전에서 가장 주목해야 하는 마일스톤

JAVA 8 - 람다 스트림의 등장

람다 스트림이 뭔데요? -> 클래스 인스턴스 메소드 이렇게 말하듯 '람다' 하고 '스트림'을 말하는 것.

  • 람다? '람다식' 이라고 부르는 일종의 식(expression).
    자바에서도 함수형 프로그래밍을 가능하게 해준 표현법.
    이 식을 쓰면 메소드의 이름을 쓰지 않도 되기 때문에, 람다를 '익명 함수'의 한 종류로 봄.
    출처 블로그

  • 스트림? 컬렉션 데이터를 선언형으로 처리할 수 있게 만든 기술. 참고 블로그
    데이터의 흐름을 다루기에 이름이 '스트림'. 람다를 사용할 수 있는 기술 중 하나.
    가장 큰 장점 -> 배열과 컬렉션을 함수형으로 처리할 수 있다는 것!

즉, JAVA에서도 SQL문처럼 데이터를 다루기 위해 탄생한게 스트림. (전에 SQL 한번 해봤다고 새삼 반가움)
-방대한 데이터를 무한 for문 돌리지 않고 내가 원하는 것만 딱 꺼내올 수 있기 때문에 큰 장점.
-쓰레드를 이용한 병렬 처리로 빨리 작업할 수 있다는 것도 장점.

profile
갑자기 왜 춤춰?

0개의 댓글