[Java] 객체 지향 프로그래밍

박성우·2023년 4월 9일
0

Java

목록 보기
2/6

프로그래밍 언어 Java의 대표적인 특징이자 장점을 하나 뽑자면 객체 지향 프로그래밍, Object Oriented Programming(OOP) 이다.

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

프로그램 구현에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들 간의 상호작용을 통해 로직을 구성하는 프로그램을 만드는 것

단순히 코드가 위에서 아래로 실행되는 것처럼 순차적인 처리를 중요시하는 절차지향 프로그래밍과는 어떤 차이가 있기에 객체 지향 프로그래밍을 하는 것일까?

객체 지향 프로그래밍의 대표적인 4가지 특징이 있다.

1. 캡슐화 (Encapsulation)

캡슐화는 데이터가 쉽게 접근되고 외부로 노출되는 상황을 방지하기 위해 서로 연관있는 속성과 기능들을 하나로 묶어 객체로 만든 후 외부에서 알 수 없게 감추는 것이다.

일반적인 캡슐화 방법에는 2가지가 있다.
1. 데이터에 접근을 제한하는 4가지의 접근 제어자, public, default, protected, private을 사용하는 방법
2. 클래스 내부에 getter/setter 메서드를 구현해서 외부로부터의 접근을 설정하는 방법

2. 상속 (Inheritance)

상속은 말 그대로 하나의 클래스가 다른 클래스의 기능과 속성을 물려받는 것을 의미한다.

상속을 하는 이유는 다음과 같다.
1. 공통 분모를 가진 객체들을 묶음으로써 객체 간의 구조를 파악하기 쉽다.
2. 부모의 필드와 메서드를 그대로 가지고있으면서 필요한 부분만 수정하고 사용이 가능하므로 코드의 중복이 줄고 코드의 재사용성이 증가한다.

3. 다형성 (Polymorphism)

다형성은 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미한다.

부모 클래스 A와 자식 클래스 B가 있다고 가정하면, 자식 클래스 B로 생성된 객체가 A 데이터 타입으로 선언되면서 B의 속성을 유지하되, A의 형태로 있을 수 있는 것이다.

3. 추상화 (Abstraction)

추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미한다.

이로 인한 객체 지향 프로그래밍의 장점은 다음과 같다.

1. 재사용성 - 상속과 같은 특징을 이용하여 코드의 재사용 증가

2. 생산성 향상 - 독립적인 객체를 사용하여 개발의 생산성 향상

3. 유지보수의 우수성 - 객체의 독립성과 캡슐화를 통해 쉽게 프로그램을 수정 가능


프로그래밍 언어 Java의 동작 원리를 이해하고자 한다면 JVM을 이해할 필요가 있다.

JVM (Java Virtual Machine)

OS에 종속받지 않고 CPU가 Java를 인식, 실행할 수 있게 해주는 가상 머신

일반적으로 모든 프로그래밍 환경은 전부 제각각이다. 그렇기 때문에 프로그래밍 언어를 인식하고 실행하는 과정도 환경에 따라 다 다르지만 JVM을 통해 이를 동일하게 만들어 줄 수 있다.

다시 말해서, 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어 주는 것이다.

우리가 Java로 코드를 작성하고 실행시키기까지의 과정은 다음과 같다.

  1. .java 클래스 파일을 작성하고 자바 컴파일러인 javac를 통해서 기계가 알아들을 수 있는 .class 파일로 컴파일한다.
  2. 클래스 로더에 의하여 .class 바이트 코드를 메모리에 저장한다.
  3. JVM을 구성하는 인터프리터와 JIT 컴파일러를 이용하여 .class 파일을 해석한다.

여기서 인터프리터와 JIT 컴파일러를 혼용해서 사용하는 이유는 다음과 같다.

바이트 코드를 한 줄씩 해석하고 실행하는 방식인 인터프리터는 속도가 느리기 때문에, 같은 코드를 매번 해석하지 않고 JIT 컴파일러를 이용하여 실행할 때 컴파일을 진행하면서 해당 코드를 캐싱한다. 이렇게 바이트 실행 코드로 변환하여 캐싱된 코드로 실행을 하기 때문에 인터프리터만 사용하는 방식보다 성능이 월등하기 때문이다.

profile
Backend Developer

0개의 댓글