Skip to content

Latest commit

 

History

History
71 lines (50 loc) · 3.52 KB

File metadata and controls

71 lines (50 loc) · 3.52 KB

OOP(Object-Oriented Programming)

Class & Object

Class

클래스는 왜 사용하는 걸까? 클래스는 세상에 존재하는 모든 것들을 추상화하기 위한 도구라고 생각한다. 즉, 사람과 자전거가 있다고 한다면, 사람에는 눈과 코, 입, 귀 등이 있다. 자전거에는 바퀴, 핸들, 페달 등이 있다. 세상에 이 둘은 같이 존재하지만, 각각 다른 특징들을 가진다. 이를 빗대어보면 하나의 프로젝트에는 사람 클래스와 자전거 클래스가 존재하지만, 각각 다른 특징들을 가진다는 말과 같다.

사람의 대부분의 특징은 자전거에는 들어있지 않고, 반대로 자전거의 대부분의 특징은 사람이 가지고 있지 않다. 또한, 사람은 걷는 행위, 먹는 행위, 구매하는 행위 등 여러가지 할 수 있는 행위가 있다. 마찬가지로 자전거도 바퀴가 굴러가는 행위, 속도가 변하는 행위 등 여러가지 행위가 있다.

또한, 사람은 사람A와 사람B 두 존재는 절대 같을 수 없다. 사람A는 180cm이고, 사람B는 170cm일 수 있다. 자전거도 마찬가지로 자전거A와 자전거B 두 존재는 절대 같을 수 없다. 자전거A는 빨간색이고, 자전거B는 파란색일 수 있다.

이러한 세상 속에 존재하는 것들을 프로그래밍 내적으로 표현하기 위해서 나타난 개념이 바로 클래스(Class)이다. 클래스는 객체(Object)를 만들기 위한 틀로, 객체의 속성과 행동을 정의한다. 객체의 속성은 변수로, 행동은 메소드로 정의된다.

클래스를 바탕으로 객체라는 것을 생성할 수 있다. 우선, 사람을 간단하게 클래스로 정의해보면 다음과 같다.

class Person {

  String name;
  int age;

  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  void walk() {
    System.out.println(name + " is walking.");
  }

  void eat() {
    System.out.println(name + " is eating.");
  }
}

Object

객체는 클래스의 인스턴스(instance)로, 클래스에서 정의한 속성과 행동을 가진 실제 존재를 의미한다. 즉, 클래스를 통해 만들어진 구체적인 사물이나 개념을 객체라고 한다. 클래스는 설계도, 객체는 인스턴스에 해당한다.

public class Main {

  public static void main(String[] args) {
    // 객체(= 클래스의 인스턴스) 생성
    Person person1 = new Person("Alice", 30);
    Person person2 = new Person("Bob", 25);

    // 행동(= Method) 호출
    person1.walk(); // Alice is walking.
    person2.eat();  // Bob is eating.
  }
}

객체 vs 인스턴스

객체와 인스턴스는 종종 혼용되어 사용되지만, 약간의 차이가 있다. 객체는 클래스의 인스턴스를 의미하며, 클래스에서 정의한 속성과 행동을 가진 실제 존재를 나타낸다. 반면, 인스턴스는 클래스의 구체적인 구현을 의미한다. 즉, 객체는 클래스의 인스턴스이며, 인스턴스는 객체의 구체적인 형태라고 할 수 있다. 즉, 모든 인스턴스는 객체이지만, 우리가 인스턴스락 부르는 순간은 특정 클래스로부터 그 객체가 생성되었음을 강조하고 싶을 때이다.

예를 들어, Person 클래스가 있다면, Person person1 = new Person() 코드를 통해서 만들어진 person1은 객체이다. 그러나, 이 객체가 Person 클래스로부터 생성된다는 점을 명확히 하기 위해서는 Person의 "인스턴스"라고 할 수 있다.