객체지향 프로그래밍을 하기위해서 알아야할 개념 중 가장 중요한 기초 지식이 바로 클래스와 객체의 관계입니다.
클래스와 객체는 떼어낼래야 뗄 수 없는 관계입니다.
클래스가 있어야만 객체를 만들 수 있고 클래스만 있다면 그건 속이 빈 껍데기일 뿐입니다.
클래스 : 특정 객체를 만들기 위해 필요한 틀 또는 설계도
객체 : 클래스의 인스턴스로써 클래스에 의해 만들어진 구현체 또는 실체

클래스( 설계도 ) 를 통해서 객체 ( 구현체 ) 를 만드는 과정을 인스턴스화 라고 하고 만들어진 인스턴스를 객체라 부릅니다.
어느정도 이해가 되신 분들을 위해 클래스와 객체의 심화관계를 조금 더 살펴보겠습니다.

아파트를 건설하기 위해 필요한 특정 호의 설계도입니다.
그리고 설계도를 통해서 구현해 낸 실제 구현체 입니다.
하지만, 아파트를 짓기 위해서는 호 하나만 필요한 것이 아니겠죠?
이건 아주 작은 규모의 클래스와 객체의 관계일 뿐입니다.
아파트를 짓기 위해서는 많은 정보가 필요하죠.
아파트에 대한 정보
1. 층
2. 호
3. 이름
4. 지하주차장
위의 요소들을 다 고려한 아파트 설계도를 생각해 내 봅시다.
1. 층에 대한 정보
엘리베이터 유무
층사이의 계단의 개수
층의 개수
2. 호에 대한 정보
설계 도면
가구 배치
책상 , 냉장고, 세탁기 , 침대 유무
3. 이름에 대한 정보
아파트 이름
아파트 주소
4. 지하추자장에 대한 정보
지하주차장 유무
지하주차장 구조
위에 설명한 아파트에 대한 정보들은 각각의 정보가 추가로 필요합니다. 이를 어떤식으로 연결시킬 수 있을까요?
아까 말씀드린 붕어빵 틀을 찍어낼 때 붕어빵에 들어간 재료가 서로 달라져도 똑같은 붕어빵모양이 되는 것 알 수 있습니다.
그렇다면 층의 개수가 달라져도 다른 것들이 다 똑같다면 기존에 20층이던 아파트가 19층이 되어도 문제가 없습니다.

왜냐하면 층의 객체를 생성한 20층의 층1 과 19층의 층2 는 다른 요소들에 영향을 주지 않기 때문이죠.
그저 층이 하나 줄어들었을 뿐입니다.
호에 대한 정보를 살펴볼까요?
호에는 집안의 도면설계가 있어야 합니다. 집의 내부를 설계해야 하기 때문이죠.
하지만 설계만 하면 끝이 아니죠 같은 호마다 설계는 같지만 집의 가구 배치나 벽지에 따라 다르게 보이기 때문이죠.
그래서 설계 도면에 대한 클래스와 가구배치 클래스를 호 클래스가 가지고 있어야 합니다.

1층 101호와 2층 101호는 호의 설계면은 같지만 방의 배치와 세탁기나 tv같은 가구들의 상품들이 다릅니다.
그래도 문제가 없죠. 그저 같은 호일 뿐이니까요.
하지만 101호에 102호의 설계면을 적용시키면 어떻게 될까요? 문제가 발생하겠죠.
아파트의 같은호끼리는 설계면이 다 같아야 하지만 설계면이 한층이라도 바뀌면 아파트의 구조가 바뀔 수 있습니다.
그래서 같은호의 설계면을 설계할때는 고정적으로 해야 합니다.
아파트의 이름은 이름만 지정해주면 되므로 간단합니다.
지하주차장은 지하 주차장의 유무로 결정됩니다. 지하주차장의 설계면이 있어도 지하주차장이 존재하지 않는 경우에는 설계도가 있어도 쓸모가 없기 때문이죠.
지하주차장이 존재한다면 그다음의 지하주차장 설계면이 필요하게 됩니다.
이를 조합하여 아파트 하나를 지어 보겠습니다.

각각의 클래스를 구현한 객체들을 조합해서 아파트 하나를 지으면 여러가지의 객체를 조합하여 만들어진 아파트가 지어지게 됩니다.
아파트 설계도 (클래스) 로 만들기 위해서 층 , 호 , 지하주차장의 객체를 연결시켜 만듭니다.
대한 아파트가 바로 아파트 클래스의 구현체 즉, 객체입니다.
클래스와 객체의 심화 관계를 알고 싶다면?
클래스와 객체의 심화 관계
자바로 프로그래밍을 하다보면 맨 처음에 클래스를 설정해야 한다. 하나의 프로젝트는 우리가 출력을 해야 하는 main 클래스와 여러개의 클래스로 구성된다. main 클래스에서는 하나의 main 함수와
codingstartup.tistory.com
'개발자가 되기 전에 알아야할 것들 > 주요 용어 개념정리' 카테고리의 다른 글
프로그래밍 언어와 분류방식(동적vs정적, 비관리vs관리, 명령형vs선언형) (0) | 2023.01.29 |
---|---|
프로그래밍이란 대체 뭘까? (1) | 2023.01.29 |
코딩이란 대체 뭘까? (0) | 2023.01.28 |
댓글