항해99 3주차 WIL

최재하·2022년 11월 27일
0

객체지향 프로그래밍이란?

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


객체지향 프로그램의 장단점

장점

  • 기존에 만들어진 클래스를 재사용할 수 있고 상속을 통해 확장 가능해서 코드 재사용이 용이합니다.
  • 수정해야 할 부분이 클래스 내부에 있으면 해당 부분만 수정하면되므로 유지보수가 수월합니다.
  • 클래스 단위로 모듈화시켜서 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합니다.

단점

  • 처리속도가 상대적으로 느립니다.
  • 객체의 수가 많아지면 용량이 커질 수 있습니다.
  • 설계단계에서 시간이 많이 소요됩니다.


객체지향 프로그램의 특징

1. 추상화

  • 공통의 속성이나 행위를 추출하여 이름을 붙이는 것
  • 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것

강아지, 고양이, 토끼, 늑대라는 이름을 가진 객체가 각각 있고 이 객체들을 하나로 묶으려고 할 때, 동물이라는 추상적인 객체로 크게 정의하여 묶는 것을 추상화라고 한다.

2. 캡슐화

  • 캡슐화는 연관있는 변수와 함수를 묶어주는 작업을 말한다.
  • 접근제어자(public, private, protected)를 활용하여 외부로부터의 접근을 제한하고 객체내에서만 접근이 가능하도록 해줍니다. 이를 정보은닉이라고 합니다.
  • 캡슐화를 통해 관련된 기능과 특성을 한 곳에 모으고 분류하기 때문에 재활용이 원활해지는 효과가 있다.

3. 상속

  • 상속이란 상위클래스의 속성과 행위를 하위 클래스에 물려주는 것을 말한다.
  • 다형성을 통해 변경이 필요한 부분을 변경하여 사용할 수 있습니다
  • 상속이 필요한 이유는 코드의 중복을 없애기 위함입니다.

4. 다형성

  • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
  • 상위클래스의 동작을 하위클래스에서 다시 정의하는 것을 오버라이딩이라고 합니다 이것 또한 다형성이라고 볼 수 있습니다.
  • 하나의 클래스내에서 이름은 같지만 서로 다르게 동작하는 메소드들을 만드는걸 오버로딩이라고 합니다. 오버로딩 또한 다형성이라고 볼 수 있습니다.

객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 됩니다.



JVM

JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할 수 있는 환경을 제공해준다. 이를 통해 자바 바이트 코드가 플랫폼에 독립적으로 어디서든 실행될 수 있게 한다. 즉, JVM 덕분에 OS에 상관없이 어디서든 JAVA 애플리케이션을 실행할 수 있게 된다.

자바 프로그램 실행과정

  1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
    JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

  2. 자바 컴파일러(javac)가 자바 소스코드(. java)를 읽어 들여 자바 바이트코드(. class)로 변환시킨다.

  3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.

  4. 로딩된 class파일들은 Execution engine을 통해 해석된다.

  5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어지게 된다.
    이러한 실행 과정 속에서 JVM은 필요에 따라 Thread Synchronization과 GC 같은 관리 작업을 수행한다.



이번주 WIL 키워드는 객체지향 프로그래밍JVM이였습니다
그래서 두 가지에 대해서 공부를 해보며 정리했는데 객체지향 프로그래밍은 어느정도 이해했지만 JVM은 아직 감이 안잡히는거 같습니다. 한마디로 JVMJava라는 언어가 어느 OS에서든 돌아갈 수 있게 만들어주는 가상머신??? 인거같습니다.

0개의 댓글