객체지향 프로그래밍이란 무엇을 뜻 하는가?
그 전에 일단 객체란, 세상에 존재하는 물체를 뜻하며 식별이 가능한 것이다. 프로그래밍에서는 객체는 속성(필드)과 행위(메서드)로 구성되어있다. 그럼 객체지향 프로그래밍이란 속성과 행위로 구성괸 객체들과 그들의 관계와 객체들을 만드는 설계도(클래스)를 이용하여 만드는 프로그램을 만드는 것을 뜻한다.
위에서 언급했듯이, 세상의 물체들에도 서로 간에 관계가 있는것 처럼 프로그래밍에서도 객체 간의 관계가 있다. 또한, 객체지향 프로그래밍에는 중요한 특징들이 있다.
📍객체간의 관계
- 사용 관계
= 객체 A 가 객체 B를 사용한다면 그 둘의 관계는 사용 관계이다.
예 : 사람은 자동차를 사용한다.- 포함 관계
= 객체 A 에 여러 객체들 B,C,D가 포함될 수 있다면, 그들의 관계는 포함 관계이다.
예 : 타이어, 차문, 핸들은 자동차에 포함되어있다.- 상속 관계
= 객체 A를 토대로 객체 B가 만들어진다면, 그 둘의 관계는 상속 관계이다.
예 : 자동차와 기차 객체는 하나의 공통된 기계시스템 객체를 토대로 만들어진다면 자동차 객체와 기차 객체는 기계시스템 객체를 상속 받는 상속 관계가 됩니다.
📍객체지향 프로그래밍의 특징
- 캡슐화 : 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것
- 상속 : 부모 객체가 가지고 있는 필드와 메서드를 자식 객체에 물려주어 자식 객체가 이를 사용할 수 있도록 만드는 것
- 다형성 : 객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러가지 형태로 재구성되는 것
- 추상화 : 객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것
📍객체와 클래스
클래스 = 설계도
객체 = 설계도를 배경으로 만들어진것
클래스를 토대로 생성된 객체를 해당 클래스의 ‘인스턴스’라고 부르며 이 과정을 ‘인스턴스화’라고 부릅니다.
동일한 클래스로 여러 개의 인스턴스를 만들 수 있다.
JVM (Java Virtual Machine): 여러 기기에 Java 프로그램을 실행시킬 수 있게 만들어주는 가상의 기기. 그럼 JVM의 구성이 무엇이고 어떻게 작동하는지를 그림 1과 2를 통하여 살펴보았다.
그림 1:
그림 2:
그림 1에는 놀이터가 나오는데, 바이트 코드(byte code/ .class)가 클래스 로더(Class Loader)를 타고 가면, 인터프리터(Interpreter)와, JIT 컴파일러(Just In Time Compiler)를 통과한 후, 메모리 영역과 가비지 콜렉터로 구성 된 Runtime 시스템으로 가서 프로그램이 출력이 되는 것을 볼수 있다.
그럼, 그림 2는, 그림 1을 조금 더 Flow-Chart 형식으로 표현한것이다. 보이는 것과 같이, Compile-time 환경에서 자바 파일 (.java)이 Java Compiler를 들어가서 바이트 코드로 변환 되었다. 그 후, Run-time 환경에서 바이트 코드가 클래스 로더라 가서, 인터프리터와 JIT컴파일러를 통과 후, Runtime 시스템에 들어간다. 그 후, 운영체제와, 하드웨어로 가는 것을 볼수 있다.
📍 JVM 순서
- 자바 파일을 만들어준다 (.java)
- 컴파일러(Compiler)를 통하여 자바파일을 운영체제가 읽을 수 있는 바이트 코드(.class)로 변환 해준다.
- 바이트 코드 파일을 클래스 로더(Class Loader)를 통하여 메모리 영역으로 운반한다. JVM으로 바이트 코드를 들고 와 메모리에 저장한다.
- 운영체제가 할당해준 JVM의 메모리 영역에 자바 데이터를 저장한다.
- 가비지 컬렉터 (Garbage Collector)로 메모리 영역에서 안쓰는 데이터를 주기적으로 청소해준다.
- 인터프리터(Interpreter)가 효율을 높여주는 JIT 컴파일러(Just In Time Compiler)와 함께 운영체제가 읽은 바이트 코드를 기기가 실행 할 수 있는 기계어로 변환해준다.
나중에 더 디테일하게 다루어 봐야겠다.
"나는 커서 코드왕이 될것이다."
'23.04.03 - '23.04.08