객체란 도대체 뭘까?

명준쓰·2023년 7월 21일
0

안녕하세요 오늘은 객체지향프로그래밍(OOP)에 대해서 포스팅 해보겠습니다.

그럼 객체지향프로그래밍을 설명하기 전에 먼저 객체란 무엇인가에 대해부터 알고 보시면 좋을 것 같습니다.

객체란

현실세계에 존재하거나 생각할 수 있는 것들이 객체다 <- 이 말은 학교에서 자바를 배우며 책에서 봤지만 너무 추상적이고 범위가 넓어 잘 이해가 되지 않앗습니다.

하지만 틀린 설명도 아닙니다.

예를 들어 설명을 하면
객체 -> 이 글을 작성하는 작성자, 보고 있는 여러분 등 또한 객체입니다.

프로그래밍을 떠나서 작성자, 독자 가 가지고 있는 개개인의 특성, 동작 등이 존재합니다.

특성 -> 키,몸무게,성별
동작 -> 앉다, 키보드를 친다, 글을 작성한다

이러한 개념들을 프로그래밍 세계로 옮기면 어떻게 되냐면

  1. 작성자 라는 클래스를 만듭니다.
  2. 키, 몸무게, 성별의 변수를 만듭니다.
  3. 앉다, 키보드를 친다, 글을 작성한다 등의 함수를 만듭니다.

자 그러면 여기서 궁금증이 생기실 수 잇습니다.

객체는 작성자, 특성은 작성자의 특성, 함수는 작성자가 행하는 동작을 의미한다면 객체가 클래스와 변수를 포함하는 단위인가에 대한 궁금증이 생기실겁니다.

정확하게 말하면 객체는 특정 클래스를 기반으로 생성되며, 이 클래스는 객체의 '상태'를 표현하는 변수와 '행동'을 표현하는 함수(메서드)를 포함합니다.

그렇다면 클래스는 무엇일까요?

클래스를 이해하기 가장 쉬운 방법은 '설계도', '틀' 로 생각하시면 이해하기 쉽습니다.

예를 들어, '자동차'라는 클래스를 만들었다고 가정해봅시다.
이 클래스는 '색상', '브랜드', '모델' 등의 멤버 변수(상태를 나타내는)와 '가속', '정지', '방향 전환' 등의 함수(행동을 나타내는)를 포함할 수 있습니다.

그러나 클래스 자체는 아무런 '실체'를 가지지 않습니다. 즉, '자동차' 클래스는 단순히 '자동차가 무엇인지'를 설명하는 청사진일 뿐입니다. 실제 '자동차' 객체를 만들려면, 이 청사진을 기반으로 '인스턴스화' 과정을 거쳐야 합니다.

인스턴스 -> 공장을 돌리다(설계도에 따라 실제 자동차를 만든다)
즉, 클래스를 기반으로 실제로 메모리에 생성된 객체

예를 들어, '테슬라 모델 S'와 '포르쉐 911'을 각각 '자동차' 클래스의 인스턴스로 생성할 수 있습니다. 이들 각각의 객체는 동일한 클래스를 기반으로 하지만, 상태(색상, 브랜드, 모델 등)는 서로 다를 수 있습니다. 그리고 이들 객체는 클래스에서 정의한 '가속', '정지', '방향 전환' 등의 함수를 사용하여 행동할 수 있습니다. 이렇게 생성된 각각의 '자동차'를 객체라고 합니다.

class Car { //설계도
    String color; //변수
    String brand;
    String model;

    void accelerate() { /* ... */ } //함수
    void stop() { /* ... */ }
    void turn() { /* ... */ }
}

Car teslaModelS = new Car(); //인스턴스화
teslaModelS.color = "Red";
teslaModelS.brand = "Tesla";
teslaModelS.model = "Model S";

Car porsche911 = new Car();
porsche911.color = "Black";
porsche911.brand = "Porsche";
porsche911.model = "911";

요약

객체지향 프로그래밍(OOP)의 핵심은 현실 세계의 객체를 프로그래밍 세계에 표현하는 것입니다. 이를 위해 클래스라는 '설계도'를 사용하여 객체의 상태와 행동을 정의하고, 클래스를 기반으로 실제 객체(인스턴스)를 생성합니다.

OOP는 현실 세계의 복잡성을 관리하는 데 도움을 주며, 코드의 재사용성과 유지보수성을 향상시킵니다. 특히, 같은 클래스를 기반으로 다양한 인스턴스를 생성함으로써 코드의 중복을 줄이고, 각 인스턴스가 독립적으로 동작할 수 있도록 합니다.

다음 포스팅에서는 OOP의 핵심 원칙인 캡슐화, 상속, 다형성에 대해 자세히 알아보도록 하겠습니다. 이해가 어려운 부분이 있거나 궁금한 점이 있으시다면 언제든지 댓글로 남겨주세요!

profile
개린이

1개의 댓글

comment-user-thumbnail
2023년 7월 21일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기