기술 공부

개발 개념 모음집 (̵̵́╹ᴥ╹)̵̵̀ 2

十月 2024. 1. 26. 17:11

• Class / Object / Instance 

Class(클래스)

<개념>
⇢ 연관된 변수와 메소드의 집합
(객체를 만들기 위한 틀이자 설계도)

Object(객체)

<개념>
⇢ 클래스에 선언된 모양대로 만들어진 실체
(소프트웨어 세계에 구현할 대상)

<특징>
⇢ 클래스의 인스턴스라 일컬음
⇢ 객체는 모든 인스턴스를 대표하는 포괄적 의미를 갖음

Instance(인스턴스)

<개념>
⇢ 객체를 소프트웨어에 실체화했을 시 그를 '인스턴스'라 부름
(설계도 즉, 클래스를 바탕으로 소프트웨어 세계에 구현된 구체적 실체)
⇢ 실체화된 인스턴스는 메모리에 할당

<특징>
⇢ 인스턴스는 객체에 포함된다고 봄
⇢ 추상적 개념(or 명세), 구체적인 객체 사이 관계에 초점을 맞출 경우 사용


  • 1. ~의 인스턴스 형태로 사용
    2. 객체는 클래스의 인스턴스
    3. 실행 프로세스는 프로그램의 인스턴스
    4. 객체 간 링크는 클래스 간 연관 관계의 인스턴스

⇢ '인스턴스'라는 용어는 반드시 클래스-객체 사이 관계로 한정지을 필요 없다.
'인스턴스'는 어떤 추상적인 개념(원본)으로부터 만들어진 복제본이나 다름 없다.


클래스 / 객체 / 인스턴스 차이

Class(클래스)와 Object(객체)의 차이

⇢ 클래스는 말 그대로 '설계도'이며, 객체는 '설계도로 구현한 모든 대상' 의미

Object(객체)와 Instance(인스턴스)의 차이

⇢ 클래스 타입으로 선언된 것을 '객체'라 일컬음
⇢ 위에 선언된 객체가 메모리에 할당되어 실제로 쓰이게 되면 '인스턴스'라 부름

⇢ 객체는 현실 세계, 인스턴스는 소프트웨어 측면에 가깝다

⇢ 객체는 '실체', 인스턴스는 '관계'에 초점을 맞춤
(객체를 '클래스의 인스턴스'라고도 부르는 걸 알 수 있겠다)

아래 코드를 보고 한 번 더 이해해보자

// * 클래스
public class Person {
  ...
}

// * 객체와 인스턴스
public class Main {
  public static void main(String[] args) {
    Animal female, male; // '객체'

    // * 인스턴스화
    female = new Person(); // female은 Person 클래스의 '인스턴스'(객체를 메모리에 할당)
    male = new Person(); // male은 Person 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}