[OOP] Class, Object, Instance 이해하기

728x90

안녕하세요

오늘은 Class, Object, Instance 에 대하여 알아보겠습니다

 

여러분들은 객체지향 프로그래밍에서 기본이 무엇이라고 생각하시나요?

 

저는 클래스를 도구로 사용하는 것이 제일 기본이라는 생각을 합니다.

 

객체지향 자체가 클래스안에 많은 변수(=필드),메소드 들이 있고 그 내용들을

다른 클래스에서 가져가다가 쓰는 그런 형태기 때문이죠.

 

그래서 객체지향을 클래스지향이라고 부르기도 한다고 합니다.

 

하지만 객체지향은 이해하기가 쉽지 않습니다.

그래서 객체지향을 이해하기 위해 여러 예제를 보고있고, 직접 예제를 짜보며 공부를 하고 있습니다.

 

그리다가 공부 중에 객체지향 설명을 할 때 항상 나오는 용어에 대해서 궁금증이 생겼습니다.

 

특히 여러 글이나 강사님들이 설명을 할 때, 어쩔때는 객체, 어쩔때는 인스턴스 라고 설명하는 경우가 많아서

그냥 듣고만 있다가, 궁금해서 정리를 해봤습니다.

 

그 내용을 오늘 포스팅 해보겠습니다.

Class

객체를 모델링 하는 도구 (설계도)

 

객체지향 프로그래밍에서 핵심 역할을 하는 도구 입니다.

클래스가 없으면, 객체지향도 없다고 생각해도 무방합니다.

public class Person {
	private String name;
}

Object(=객체)

클래스를 통해서 선언되는 변수

클래스를 선언하여 변수화 하는 것입니다.

Person p;

 

뒤에 초기화가 안된 위 p를 객체라고 합니다.

즉 변수가 구체적인 실체를 가리키지 않는 상태 → 객체 변수

객체가 서로 구분이 되지 않는 시점을 의미 합니다.

Instance (=실체)

Object(=객체) 생성에 의해 메모리(Heap)에 만들어진 객체

Person p = new Person();

위 코드에서 초기화가 되어 구체적인 실체를 가리키는 상태를 인스턴스 변수라고 합니다.

위 코드를 작성하면 p 라는 객체가 Heap메모리 안에 공간을 차지하게 됩니다.

p가 바로 인스턴스 변수 입니다.

 

즉 인스턴스 변수는 객체가 서로 구분이 되는 시점 입니다.

자바에는 추상화가 있기 때문에, 초기화가 되지 않으면 잘 구별을 못할 수도 있습니다.

위 내용은 나중에 포스팅을 하겠습니다.

 

사실 위 3개는 서로 비슷한 개념으로 모두 객체를 가리키는 용어라고 생각하면 이해가 편합니다.

만들어지는 시점에 따라서 불리는 이름이 다르다고 생각하면 됩니다.

 

그래도 인스턴스 까지는 만들어 놔야 클래스에 접근할 수 있어 써먹을 수 있는건 알고 있어야 합니다.

코드를 통해서 한번 전체적인 흐름을 보겠습니다.

public class Person {

  private String name;
  private String dept;
  private int age;
  private String email;
  private int year;
  private String phone;

  public Person() {
  }
  //getter 생략
  //setter 생략
}

  • 클래스를 생성했고, 클래스안에 여러 변수들을 넣어놨습니다.
    • 그리고 변수가 private이니, getter,setter로 접근할 수 있게 해놨습니다.
public class PersonEx {

  public static void main(String[] args) {
    
    Person p1; // 객체 만 생성 -> Object

    Person p = new Person(); // 인스턴스
    p.setName("kim jae ho");
    p.setAge(20);
    // 등등
    
  }

}

  • Person p1 : 는 뒤에 실제로 구현이 되는 것이 없습니다.
    • 그래서 저 코드는 무엇을 의미하는지 알 수 없고, 클래스에 접근 할 수 없다
    • 즉 → 객체 라고 알면 된다
  • Person p = new Person() : 객체를 구현하는 구현체가 있습니다.
    • 그래서 위 코드는 객체에 접근할 수 있습니다
    • 즉 → 인스턴스 변수

 

  • 간단하게 이해하려면 초기화가 되어있다? → 인스턴스 변수
  • 초기화가 안돼있다? → 객체 이다.

 

용어를 이해하는데 도움이 되셨으면 좋겠습니다. 이상입니다.

728x90