'객체지향 프로그래밍'의 정의를 찾아보면
'소프트웨어 개발에서 객체를 중심으로 문제를 해결하는 방법론' 혹은
'프로그램을 객체라는 단위로 구성하여 개발하는 프로그래밍 기법'이라고 많은 곳에서 알려준다.
너무나 당연한 말처럼 알고있던 이 단어가 어느날 문득
왜 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)은 특정 기능을 수행하는 로직이 담겨있는 설계도인 클래스를 만들고, 이 클래스들을 실체화한 객체들 간의 상호 작용으로 애플리케이션을 구성하는 방법을 의미한다.
'Java' 카테고리의 다른 글
Method invocation may produce NullPointerException 과 Optional 활용 (0) | 2024.10.11 |
---|---|
경로(Path) 설정시 *, ** 차이 (0) | 2023.04.13 |
break와 return, continue 차이 및 특징 정리 (0) | 2019.02.15 |
Java String과 String Pool 및 메모리에 대한 정리 (0) | 2019.01.29 |