# WIL: 2022년 7월 4주차

wisdom·2022년 7월 24일
0

Weekly I learned

목록 보기
3/18

배움: JVM 과 객체지향 프로그래밍

JVM

  • Java Virtual Machine
  • 바이트 코드로 컴파일된 프로그램을 실행하는 가상 머신
    • 가상 머신: 컴퓨터 시스템을 가상화하는 프로그램 (OS에 의존하지 않도록 하기 위함
  • JVM은 자바로 작성해서 컴파일한 소프트웨어들이 JVM이 깔린 어떤 종류의 컴퓨터에서든 돌 수 있게 해준다.
    • 자바의 원칙
      • 한 번 작성하면 모든 곳에서 실행한다.
      • Write Once, Run Anywhere
  • 컴퓨터는 0과 1로 이루어진 기계어만 이해한다.
  • 내가 작성한 프로그래밍 언어를 컴퓨터가 알아들을 수 있는 기계어로 바꿔주는 작업을 C나 자바같은 컴파일 언어에서는 컴파일러가 진행을 해준다.
  • 자바로 코딩을 하고 나서 컴파일을 하면 바이트코드가 생긴다.
    • 바이트코드는 사람이 작성한 코드와 기계어의 중간 단계에 있는 코드 개념
    • Hello.java 를 작성하고 나서 터미널에 javac Hello.java 명령어를 치면 같은 위치에 Hello.class가 만들어지는데 해당 파일이 바이트코드로 이루어진거다.
  • 바이트코드를 실행할 컴퓨터에 깔린 JVM에 전달하면 그 컴퓨터가 프로그램을 실행할 때 JVM이 바이트코드를 그때그때 기계어로 바꿔준다.
  • 자바 뿐만이 아니라, Scale, Clojure, Groovy 그리고 Kotlin같은 언어들도 다 JVM이 전용 바이트코드로 컴파일이 된다.
  • 실행 시점에 그때그때 기계어로 바꿔주는 방식을 Just In Time 컴파일, 줄여서 JIT 컴파일이라고 한다.

객체지향 프로그래밍이 대체 뭘까?

  • 객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나
  • 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

객체지향 프로그래밍 장점

  • 코드 재사용
    • 상속을 통해 확장해서 사용할 수 있다.
  • 유지보수가 쉽다
    • 클래스 내부에 변수 혹은 메서드만 수정하면 된다.
  • 클래스 단위로 모듈화시켜서 개발할 수 있다.
    • 업무 분담하기 쉽다.

객체지향 프로그래밍 단점

  • 설계에 많은 시간과 노력이 필요하다.

클래스가 뭘까?

  • 속성과 행위를 변수와 메서드로 정의한 것
  • 객체를 만들기위한 메타정보같은 것

인스턴스가 뭘까?

  • 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것

객체지향 프로그래밍에서 추상화

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것

캡슐화가 뭘까?

  • 기능과 특성의 모음을 '클래스' 라는 '캡슐'에 분류해서 넣는 것
  • 목적
    • 코드 재수정없이 재활용
    • 접근 제어자를 통한 정보 은닉

상속

  • 부모클래스의 속성과 기능을 그대로 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우 상속받은 자식클래스에서 해당 기능만 다시 정의하여 사용할 수 있게 하는 것

다형성

  • 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것
  • 즉 오버라이딩과 오버로딩이 가능하다.

회고

  • 다음에 기회가 되면 '찰스펫졸드-CODE 코드' 를 꼭 읽어 보고 싶다. 기계어에 대해 더 자세하게 알 수 있을 것 같다!
  • 객체지향에 대해서는 반복해서 공부해도 아직 추상적으로 느껴진다. 코드를 지금보다 훨씬 더 많이 짜보면 와닿을 것 같다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글