Java

[OOP] 왜 Class가 아니라 Object Oriented Programming 일까?

천방지축 개발노트 2024. 8. 26. 20:28

'객체지향 프로그래밍'의 정의를 찾아보면

'소프트웨어 개발에서 객체를 중심으로 문제를 해결하는 방법론' 혹은

'프로그램을 객체라는 단위로 구성하여 개발하는 프로그래밍 기법'이라고 많은 곳에서 알려준다.

너무나 당연한 말처럼 알고있던 이 단어가 어느날 문득

왜 Class Oriented 가 아니라 Object Oriented 라는 명칭으로 정해졌을까?라는 궁금점이 생겨 다시 정리해봤다.


 

객체지향 프로그래밍(OOP, Object-Oriented Programming)이란?

OOP 라는 용어를 모른다고 할지라도 특히나 Java로 개발을 하면 반드시 객체를 만들게 되어있다.

따라서 우리가 만드는 건 오브젝트(Object)가 맞다. 하지만 사실 코딩을 할 땐 Object라는 단어를 한 글자씩 타이핑하진 않고 실제로 public class { ... } 이런 식으로 작성한다.

우리는 클래스를 만드는데 왜 '클래스 오리엔티드 프로그래밍'이라고 하지 않고 OOP라고 부를까??

 

결론부터 말하면, 우리는 클래스를 코딩하지만 그 클래스를 이용하여 실제로 메모리 위에서 기능을 수행하는 오브젝트를 만들기 때문이다. 결국 프로그래밍에서. 그리고 Java 개발에서. 더 나아가 스프링(Spring)에서조차 가장 관심이 있는 것은 '메모리 위에서 실제로 동작하는 오브젝트라고 불리는 무언가'인 것이다.

 

 

클래스(Class)와 객체(Object), 인스턴스(Instance)

 

1) 클래스

붕어빵 틀

JAVA 공식 문서에서는 클래스를 '객체를 정의하는 청사진(blueprint)'이라고 표현하고 있다.

문장의 느낌을 보면 클래스는 Object를 만들기 위해 필요한 설계도라는 걸 알 수 있다.

다시 말해, 우리는 클래스를 코딩하고 그 클래스를 이용해서 오브젝트를 만든다.

 

 

2) 객체(Object), 인스턴스(Instance)

설계도라고 표현하는 클래스로 무언가를 만들어내야 하는데, 그렇게 클래스의 내용을 실체화한 것이 오브젝트라고 설명했다. 그리고 클래스의 실체인 오브젝트를 Java에서는 '인스턴스'라고 부른다.

 

프로그램을 실행했을 때 (그 클래스를 기반으로) 실제로 동작하는 무언가. 이 오브젝트가 기능을 수행하는 것이다.

다시 말해, 설계도인 클래스는 말 그대로 객체를 생성하는 템플릿 역할을 할 뿐, 실제로 메모리에 존재하면서 동작하는 것은 객체이다. 객체가 생성되고, 이 객체들이 서로 메시지를 주고받으며 프로그램이 실행된다. 따라서 런타임에서의 주체인 객체의 생성과 상호작용에 중점을 두는 것이 OOP인 것이다.

 

클래스의 인스턴스가 곧 오브젝트

 

이는 Java Document에 나오는 표현으로써, 자바에서 오브젝트가 뭔가요? 하면 "클래스의 인스턴스입니다" 라고 하는 것이 기술적으로 완벽한 답변이라고 한다. 즉, 이 객체라는 것의 다른 이름은 '클래스의 인스턴스'이다. 참고로 인스턴스란 '앞에 나온 추상적인 것에 대한 실체'라는 것을 뜻한다.

 

 

3) 정리

객체지향 프로그래밍(Object Oriented Programming)은 특정 기능을 수행하는 로직이 담겨있는 설계도인 클래스를 만들고, 이 클래스들을 실체화한 객체들 간의 상호 작용으로 애플리케이션을 구성하는 방법을 의미한다.