개발을 하다 보면 정말 자주 듣고 보고 말하고 쓰게 될 말이 위 3개 입니다.
간혹 물어보면 정확히 답변 못하는 경우가 많은데 오늘은 객체, 클래스, 인스턴스에 대해 알아보도록 하겠습니다.
An object is a class instance or an array.
제임스 고슬링이 작성한 자바 언어 설명서 (The java Language Specification)에는 객체(object)란 클래스의 인스턴스나 배열을 말한다고 정의되어 있습니다.
컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미합니다.
객체지향 프로그래밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인스턴스라고 지칭합니다.
넓은 의미로 객체는 실세계에 존재하거나 생각할 수 있는 것을 뜻합니다.
우리가 개발을 하면서 접하게 될 프로그래밍에서의 객체는 속성과 기능을 가지는 프로그램 단위를 뜻합니다.
아이폰 프로그램이 있다고 하면 속성으로는 색상, 용량 등이 있고 기능으로는 전화 등의 기능이 있겠지요.
여기서 속성은 흔히 말하는 멤버 변수, 파라미터를 말하고 기능은 메서드를 의미합니다.
그렇다면 클래스는 무엇을 말하는 것일까요?
객체지향 프로그래밍에서 클래스는 멤버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식입니다.
쉽게 말해, 객체를 찍어내기 위한 틀, 설계도라고 보시면 됩니다.
아이폰을 산다고 했을 때 아이폰 무슨 색상인지, 용량은 얼마로 하는지 다 다르지만 공통적으로 색상과 용량이라는 속성과 전화라는 기능을 가집니다.
이런 아이폰 객체들은 아이폰 클래스에서 생성되었다고 할 수 있습니다.
그러면 인스턴스는 무엇을 말하는 걸까요?
인스턴스란 설계도(클래스)를 바탕으로 실체화되어 메모리에 할당된 실체를 말합니다.
클래스에서 나온다는 점에서 객체와 유사하지만, 차이점을 말하자면,
객체는 소프트웨어 세계에 구현할 대상이고, 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스입니다.
인스턴스는 객체에 포함된다고 볼 수도 있습니다.
객체 | 클래스 | 인스턴스 |
소프트웨어 세계에 구현할 대상, 속성과 기능을 가지는 프로그램 단위 |
객체에 속성과 기능을 넣어줄 설계도 | 클래스에 따라 메모리상에 구현된 실체 |
참고
- The Java Language Specification
https://docs.oracle.com/javase/specs/jls/se8/html/index.html
- 위키피디아
https://en.wikipedia.org/wiki/Object_(computer_science)
https://en.wikipedia.org/wiki/Class_(computer_programming)
https://en.wikipedia.org/wiki/Instance_(computer_science)
- 네이버 지식백과
https://terms.naver.com/entry.naver?docId=3532992&cid=58528&categoryId=58528
- 객체와 인스턴스의 차이
https://cerulean85.tistory.com/149
- [Java] 클래스, 객체, 인스턴스의 차이
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
'프로그래밍(Basic) > 이론' 카테고리의 다른 글
[바미] IPC (2) | 2022.12.29 |
---|---|
[바미] 코드 리펙토링(Code Refactoring)에 대해서 (0) | 2022.12.28 |
[바미] Java - Garbage Collection (0) | 2022.12.06 |
[바미] 선형성(Linearity)에 대해 (0) | 2022.11.01 |
[바미] BROWSER-RENDERING에 대하여 (0) | 2022.08.30 |