학습 목표 3.1.A: 자연어 사용 또는 도표 작성을 통해 프로그램의 설계를 표현하며, 모든 속성과 거동을 포함하여 각 클래스에서 발견되는 데이터 및 절차적 추상화를 나타냅니다.
- 3.1.A.1 Abstraction is the process of reducing complexity by focusing on the main idea. By hiding details irrelevant to the question at hand and bringing together related and useful details, abstraction reduces complexity and allows one to focus on the idea.
- 3.1.A.2 데이터 추상화는 데이터 유형의 추상적 속성과 그 표현의 구체적 세부 사항 사이의 분리를 제공합니다. 데이터 추상화는 표현의 구체적인 세부 사항을 참조하지 않고 데이터를 이름만 부여하여 복잡성을 관리합니다. 데이터는 단일 변수 또는 클래스나 데이터 집합과 같은 데이터 모음의 형태로 존재할 수 있습니다.
- 3.1.A.3 속성은 메서드나 컨스트럭터 외부의 클래스 내에서 정의되는 데이터 추상화의 일종입니다. 인스턴스 변수는 클래스의 각 인스턴스에 대해 고유한 값을 가지는 속성입니다. 클래스 변수는 클래스의 모든 인스턴스가 공유하는 속성입니다.
- 3.1.A.4 Procedural abstraction provides a name for a process and allows a method to be used only knowing what it does, not how it does it. Through method decomposition, a programmer breaks down larger behaviors of the class into smaller behaviors by creating methods to represent each individual smaller behavior. A procedural abstraction may extract shared features to generalize functionality instead of duplicating code. This allows for code reuse, which helps manage complexity.
- 3.1.A.5 매개변수를 사용하면 프로시저를 일반화하여 다양한 입력 값이나 인자로 재사용할 수 있게 한다.
- 3.1.A.6 프로그램에서 프로시저 추상화를 사용하면 메서드 서명 및 메서드가 수행하는 기능이 유지되는 한 메서드 사용자에게 변경 사항을 알릴 필요 없이 메서드의 내부 구현(속도 향상, 효율성 증가, 저장소 사용량 감소 등)을 변경할 수 있다.
- 3.1.A.7 클래스를 구현하기 전에 속성과 거동을 포함하여 각 클래스의 설계를 세우는 것이 유용합니다. 이 설계는 자연어 또는 도표를 사용하여 표현할 수 있습니다.

