-
[JAVA] 객체 지향 프로그래밍에서 객체, 클래스, 인스턴스의 개념개념정리/JAVA 2020. 3. 5. 22:07반응형
목표
- 클래스, 객체, 인스턴스의 개념을 설명할 수 있다.
- 클래스, 객체, 인스턴스의 차이를 이해할 수 있다.
클래스, 객체, 인스턴스의 개념
클래스(Class) 란
- 개념
* 객체를 만들어 내기 위한 설계도 혹은 틀
* 연관되어 있는 변수와 메서드의 집합
객체(Object) 란
- 개념
* 소프트웨어 세계에 구현할 대상
* 클래스에 선언된 모양 그대로 생성된 실체 - 특징
* '클래스의 인스턴스(instence)'라고도 부른다
* 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
* OOP의 관점에서 클래스의 타입으로 선언되었을 때 '객체'라고 부른다.
인스턴스(Instance) 란
- 개념
* 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
* 즉, 객체를 소프트웨어에 실체화 하면 그것을 '인스턴스'라고 부른다.
* 실체화된 인스턴스는 메모리에 할당된다. - 특징
* 인스턴스는 객체에 포함된다고 볼 수 있다.
* OOP의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 '인스턴스'라고 부른다.
* 추상적인 개념(또는 명세)과 구체적인 객체 사이의 관계에 초점을 맞출 경우에 사용한다.
*'~의 인스턴스' 형태로 사용한다.
* 객체는 클래스의 인스턴스다.
* 실행 프로세스는 프로그램의 인스턴스다.
* 즉, 인스턴스라는 용어는 반드시 클래스와 객체 사이의 관계로 한정지어서 사용할 필요는 없다.
* 인스턴스는 어떤 원본(추상적인 개념)으로부터 '생성된 복제본'을 의미한다.
예시
/* 클래스 */ public class Animal { ... } /* 객체와 인스턴스 */ public class Main { public static void main(String[] args) { Animal cat, dog; // '객체' // 인스턴스화 cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당) dog = new Animal(); // dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당) } } https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
클래스, 객체, 인스턴스의 차이
클래스(Class) VS 객체(Object)
-
클래스는 '설계도', 객체는 '설계도로 구현한 모든 대상'을 의미한다.
객체(Object) VS 인스턴스(Instance)
-
클래스의 타입으로 선언되었을 때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.
-
객체는 현실 세계에 가깝고, 인스턴스는 소프트웨어 세계에 가깝다.
-
객체는 '실체', 인스턴스는 '관계'에 초점을 맞춘다.
* 객체를 '클래스의 인스턴스'라고도 부른다.
-
방금 인스턴스 화하여 레퍼런스를 할당한 객체를 인스턴스라고 말하지만, 이는 원본(추상적인 개념)으로부터 생성되었다는 것에 의미를 부여하는 것일 뿐 엄격하게 인스턴스를 나누긴 어렵다.
References
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html객체 지향 프로그래밍 (Object-Oriented Programming, OOP)이란?
클래스를 이해하기 위해서는 객체지향 프로그래밍에 대한 이해가 먼저 필요하다. 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉"객체"들의 모임으로 파악하고자 하는 것이다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.
References
https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D- 추상화(abstraction)
실제 세상을 프로그래밍으로 옮길 수 있게, 필요한 기능들만 가져와서 단순화 - 캡슐화(encapsulation)
보안적인 기능에 도움을 줌, 규칙 정의, 사용 용도 명확히. 안에 있는 값을 노출하지 않음. - 상속성(inheritance)
부모를 지정하고, 부모의 코드를 가져다가 쓸 수 있는 것. 코드의 재사용성 - 다형성(polymorphism)
변수가 여러 가지 모습으로 변할 수 있는 것.
References
https://velog.io/@max9106/Java-%ED%81%B4%EB%9E%98%EC%8A%A4Class클래스(class) 란?
클래스를 프로그래밍적 언어로 표현하자면 '어떠한 객체의 변수(valiable), 메서드(method)의 집합이다.'라고 표현할 수 있으며 현실세계에 빗대어 말하자면 '동일한 속성과 행위를 수행하는 객체의 집합이다.'라고도 표현할 수 있다.
(여기서 객체는 현실세계에 있는 유형/무형의 대상을 말한다.)
조금 더 쉽게 예를 들어 설명하자면 학교를 예를 들어 학교에는 학생도 있고 학생을 가르치는 교사가 있다. 그러면 학생과 교사는 동일한 일을 수행하는가? 그렇지 않다. 학생은 교육을 받는 대상이며 교수는 학생을 교육하는 사람이다. 그렇다면 위에서 설명한 동일한 일을 수행하는 어떠한 집합이라고 표현할 수 없다. 따라서 학생과 교수는 서로 다른 클래스로 나타내야 한다.
학생도 여러 학생이 있을 수 있다. 그러면 학생들은 모두 같은 객체인가? 그렇다.
학생은 학번, 이름, 성별, 전공, 수강 과목이라는 동일한 속성을 가지며 모든 학생은 수강이라는 행위를 수행한다. 따라서 개개인의 학생은 모두 하나의 학생이라는 객체의 집합으로 묶을 수 있다.
References
https://javacpro.tistory.com/29'개념정리 > JAVA' 카테고리의 다른 글
추상클래스와 인터페이스의 차이점 (0) 2020.02.25