※ 학습 중에 정리한 내용으로, 미흡한 부분이 있을 수 있으니, 참고 바랍니다.
객체지향의 특성: 캡슐화
캡슐화란?
데이터(변수)와 기능(메서드)을 하나의 클래스에 묶고, 외부에서 마음대로 접근하지 못하게 막는 것.
= 사용목적은 단순히 숨기는 것에 그치지 않고 안전하고 통제된 방식으로 접근가능!
클래스(Class)란?
객체를 만들기 위한 설계도 → 캡슐화의 단위 혹은 역할.
객체(Object)란?
클래스를 기반으로 실제 메모리에서 만들어지는 실체! = 완성품
Example: Animal이라는 클래스(설계도)가 존재하면, 객체는 Lion, Dog, Cat 등이 될 수 있다.
설계도(클래스) → 완성품(객체)
인스턴스(Instance)란?
해당 클래스의 객체를 아울러서 "클래스의 인스턴스"라고 표현.
즉, 객체 = 인스턴스(큰 범위)
- 모든 인스턴스는 객체이지만, 모든 객체가 항상 인스턴스라고 하진 않음
클래스 내부 요소
1. 필드(멤버 변수)
C언어의 변수 = 필드
즉, 객체의 속성을 저장하는 변수다.
2. 메서드
C언어의 함수 = 메서드
3. 생성자
클래스의 객체를 생성하고 초기화하는 역할.
과정: 클래스의 객체이자 변수 선언 → new 키워드로 객체 생성 → 점(.)연산자로 객체 변수 접근

객체지향의 특성: 상속(Inheritance)
상속이란?
기존 클래스(부모 클래스)의 속성과 기능을 새로운 클래스(자식 클래스)가 물려받는 것.
- 상속을 사용하면 기존 코드를 재사용하면서, 자식 클래스에서 필요한 기능만 추가하거나 변경할 수 있다.
→ 부모 클래스(Super Class) / 자식 클래스(Sub Class)
Example: 피자 가게 프로그램 구현 → 새로운 메뉴 '치즈 피자'와 '불고기 피자' 추가한다고 가정.

상속 없이 구현하는 경우

위 사진처럼 Cheesepizza, Bulgogipizza가 menu 클래스를 상속하지 않으면 menu 클래스(부모 클래스) 안에 있는 속성&메서드 사용 불가.
즉, 부모 클래스 상속하지 않을 시, 완전히 별개의 클래스가 됨.
상속을 이용하여 구현하는 경우

상속 extend 키워드 사용!
- 부모 클래스 Menu의 기능을 자식 클래스 Cheesepizza, Bulgogipizza들이 물려받음.
- 자식 클래스만의 고유 기능을 추가할 수 있음. (단, 부모 클래스는 자식 클래스로부터 물려받을 수 없음)
객체지향의 특성: 다형성(Polymorphism)
다형성이란?
같은 이름의 메서드(함수)가 클래스나 객체에 따라 다르게 동작하도록 만드는 것.
= 같은 이름, 다른 기능!.
두 가지 형태의 다형성
오버로딩(Overloading)이란?
같은 클래스 내부에서 메서드의 이름은 같지만, 매개변수를 다르게 선언하여 기능이 다르게 작동하는 것.
사용목적: 다양한 입력 처리를 하기 위함
Example: 오버로딩 예시

= 같은 이름의 메서드(add)가 입력 타입&개수에 따라 다르게 작동.
오버라이딩(Overriding)이란?
부모 클래스(슈퍼클래스)의 메서드를 자식 클래스(서브클래스)에서 재정의하여 호출.
사용목적: 부모로부터 상속받은 기능을 다르게 구현하기 위함.
오버라이딩은 상속 관계에서만 사용가능!

상속된 자식 클래스의 객체를 통해 기능 변경 가능, 매개변수는 무조건 동일해야 함.
즉, 슈퍼클래스의 메소드를 서브 클래스마다 다르게 구현
절차 지향 프로그래밍 VS 객체 지향 프로그래밍
절차 지향 프로그래밍 - 프로그램을 순서대로 처리하는 방식
- 함수&절차의 모음으로 구성
Example:
절차 지향 프로그래밍 실행 절차 - 상품 구매 예시
1. 입금할 금액.
▼
2. 돈이 충분한지 확인
▼
3. 참이면, 상품 선택
▼
4.재고 확인
▼
참이면, 배송 수행.
▼
종료
객체 지향 프로그래밍
객체(데이터 + 기능) 간의 상호작용을 통해 프로그램 작성.
- 각 객체는 자신의 역할에만 집중.
- 객체들 간 필요한 작업이 있으면 서로 메시지(비유)로 전달하여 수행.
장점:
- 순서와 상관없이 객체 단위로 나뉘어 설계 가능.(단, main함수에서는 절차적으로 수행)
- 유지보수, 확장, 재사용성 쉬움.
- 클래스 → 객체 생성 → 서로 협력하여 기능완성
Example:
객체 지향 프로그램 설계 절차 - 자판기 프로그램 구현
