# 6.1.2 클래스
1. 객체지향 프로그래밍의 핵심 개념 중 하나
2. 객체를 생성하기 위한 템플릿
3. 인스턴스화 전까지는 메모리의 힙 영역을 소모하지 않음
4. 여러번 인스턴스화 할 수 있음
5. 하나의 클래스는 하나의 작업만 함
**[MY Answer]**
클래스는 객체지향프로그래밍의 핵심 개념 중 하나입니다. 클래스는 객체를 생성하기 위한 템플릿으로 인스턴스화 전에는 메모리의 힙 영역을 소모하지 않습니다. 예를 들어 자동차라는 객체를 생성한다고 할 때, 클래스는 설계도로 비유할 수 있습니다. 클래스를 선언할 때는 public, private, void 등으로 생성되는 객체의 형태를 명시하고 기능적 메서드를 포함합니다.
<details><summary>[채점결과]</summary>
<p>당신의 답변은 매우 잘 설명되어 있습니다.</p>
<p>클래스의 역할과 객체 생성에 대한 설명, 그리고 자동차라는 비유를 통해 복잡한 개념을 이해하기 쉽게 만들었습니다.</p>
<p>또한 접근 제어자(public, private 등)와 메서드에 대한 언급도 포함하였습니다. </p>
<p>하지만 한 가지 추가적으로 언급하면 좋을 부분이 있습니다.</p>
<p>클래스는 객체의 속성(필드)와 행위(메서드)를 정의합니다. 이 부분을 명시적으로 언급하면 클래스가 데이터와 그에 관련된 동작을 함께 캡슐화하는 역할을 하는 것임을 더욱 명확히 할 수 있습니다.</p>
그 외에는 아주 잘 작성되었다고 생각합니다! 따라서 저는 당신의 답변에 9점을 주겠습니다. 조금 더 완벽하게 만들기 위해서는 위에서 언급한 '클래스가 데이터와 동작을 캡슐화한다'는 개념을 포함시키면 좋겠습니다.
</details>
**[BOOK Answer]**
**클래스는 객체지향 프로그래밍의 핵심 개념 중 하나**입니다. 클래스는 특정 타입의 객체를 만드는데 필요한 지침의 집합입니다. **클래스는 템플릿, 청사진** 또는 객체를 만드는 방법을 알려주는 레시피라고 할 수 있습니다. **객체를 만드는 과정을 '인스턴스화한다'** 고 하며, new키워드로 수행할 수 있습니다. 클래스는 **여러번 인스턴스화하여 원하는 만큼 많은 객체를 만들 수 있습니다.** 클래스의 정의는 파일 형태로 하드 드라이브에 저장될 뿐 **메모리의 힙 영역을 소모하지 않습니다.** 클래스를 인스턴스화하면 생성된 객체는 메모리 힙 영역에 할당됩니다. 클래스가 따라야 하는 중요한 원칙 중 하나는 **단일 책임원칙**입니다. **클래스는 이 원칙을 따르면서 단 하나의 일을 할 수 있도록 설계 및 작성**되어야 합니다.
**[GPT Answer]**
클래스는 객체지향 프로그래밍에서 중요한 개념입니다. 클래스는 객체를 생성하기 위한 '틀' 또는 '설계도'라고 볼 수 있습니다. 이 설계도에 따라서 실제로 메모리에 생성되는 것이 인스턴스(객체)입니다.
클래스 내부에는 변수와 함수가 포함될 수 있습니다. 변수들은 클래스가 표현하려는 대상의 속성을 나타내며, 함수(메서드)들은 그 대상의 행동을 나타냅니다.
예를 들어, '자동차'라는 클래스를 생각해보겠습니다. 자동차의 속성으로는 색상, 모델명, 제조사 등이 있을 수 있으며, 이런 속성들은 클래스 내부의 변수로 표현됩니다. 또한 자동차가 할 수 있는 행동으로는 전진하기, 후진하기, 멈추기 등이 있을 것이며 이런 행동들은 메서드로 정의됩니다.
클래스 선언 시에 접근 제어자(public, private 등)를 사용하여 해당 클래스나 멤버(변수와 메서드)가 어디까지 접근 가능한지 범위를 지정할 수 있습니다. 이렇게 접근 제어자를 사용하면 정보 은닉과 캡슐화라는 객체지향 프로그래밍의 중요한 원칙을 따르게 됩니다.
따라서 클래스란 같은 종류의 집단에 속하는 속성(attribute)과 동작(methods)을 정의한 것으로 볼 수 있으며 실세계에서 인식하는 개체(entity)를 모델링하여 소프트웨어 세계에 실체화시키기 위한 방법론입니다.