항해99 14일차 WIL

홍당무·2022년 11월 27일
0

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

프로그램 설계방법론이자 개념의 일종으로, 명령형 프로그래밍에 속한다. 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다. 서술의 편의상 객체지향을 Java 위주로 소개하고 있고 class나 public 같은 용어를 사용했다. 이 경우만 객체지향에 해당하는 것으로 오해하지 않게 주의해야 한다. 모든 언어가 class나 접근 제한자(public이나 private)를 사용하지는 않는다. 대표적인 예로 JavaScript는 프로토타입 객체지향을 사용하고 있고 Python에는 접근제한자가 없다. 객체지향은 특정 언어가 아니라 개념이다. "클래스는 객체이며 구조체는 객체가 아닌 데이터의 집합"이라는 설명 역시 틀렸고, 특정 언어가 객체지향 언어라는 말도 완전히 틀린 표현이다.

사전상의 의미로 이러한 서술이 있어 가져왔다. Java의 객체지향 프로그래밍을 배우면서 가장 어려웠던 부분은 '객체를 생성하고 필드를 선언하고 생성자로 초기화한다.' 라는 단순한 문장이 실제 코드로 옮겨왔을 때, 가지는 의미가 매우 크기 때문이었을 것이다. 단순히 비슷한 형태를 취하고 있어 헷갈리는 것도 있지만 실제로 생성한 객체를 활용하는 것도 어려움의 연속이었다.

이제 조금 감을 잡았나 싶었을 때, 알고리즘 문제를 풀어보면 여지없이 나의 수준을 알 수 있다.

객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서1) 자신의 속성을 가지고 있고 2) 식별 가능한 것을 말한다.







JVM

Java로 개발한 프로그램을 컴파일하여 만들어지는 바이트코드를 실행시키기 위한 가상머신. JRE(Java Runtime Environment)에 포함되어 있으며, Java 컴파일러가 프론트엔드를 담당한다면 Java 가상 머신은 코드 최적화와 백엔드를 담당한다.

JVM은 플랫폼 독립적으로, JVM이 실행 가능한 환경이라면 어디서든 Java 프로그램이 실행될 수 있도록 한다. 즉, Java의 모토인 Write once, Run anywhere는 JVM을 통해 가능한 것이다.하지만 특정 운영체제의 특수한 기능을 호출하거나 하드웨어를 제어하는 등의 일은 JVM으로 할 수 없으며, JNI 같은 Native 코드를 호출하기 위한 인터페이스를 거쳐야 한다.

Java 가상머신이라고 해서 Java 바이트코드만 인식하는 것은 아니다. 이 바이트코드를 Java가 아닌 다른 언어들을 가지고도 생성할 수 있기 때문이다. 따라서 지금의 Java 가상머신은 Java만을 위한 것이라고 생각하면 안 된다. 이름이 Java 가상머신이다 보니 Java에 종속된 게 아닌가 생각할 수도 있지만 그렇지도 않다. Java 가상머신은 코틀린 코드를 컴파일해도 읽을 수도 있고 스칼라 코드를 컴파일해도 읽을 수 있다. 단, 기본이 Java를 위해서 만들어졌기 때문에 Java 소스 코드와 컴파일된 바이트코드는 비교적 직관적으로 연결되지만, 코틀린이나 스칼라의 경우 Java와의 호환성을 고려하긴 했어도 상대적으로는 비직관적이며 필연적으로 Java를 공부해야 한다는 단점이 있다.

profile
공부하는 백엔드 개발자

0개의 댓글