Contents
- 절차적 프로그래밍과 객체지향 프로그래밍의 차이 파악
- 클래스와 객체를 구분하여 설명
- 클래스 선언과 객체 생성 방법 파악
- 인스턴스 변수, 클래스 변수, 메소드, 오퍼레이션 용어 파악
프로그램을 여러 객체라는 기본 단위로 나누고 객체 사이의 상호 작용으로 동작하는 것으로 인식하고 기술하는 방식
초기의 프로그래밍 방식은 순차적/절차적 프로그래밍
순차적 프로그래밍(Sequential programming)
명시된 입력을 받아서 명시된 순서로 처리하고 순차적으로 결과를 내는 방식
절차적 프로그래밍(Procedural programming)
프로그램을 여러 작은 함수(Procedure)들의 단계적 호출로 구성하는 방식
PP에서 함수는 데이터의 처리 방식만 구조화 했을 뿐 데이터 자체는 구조화 하지 못했음
프로그램의 규모가 커지면 함수들이 서로 얽혀 유지보수가 어려움
PP에서는 함수가 계층적인 구조를 이룸
OOP에서는 클래스의 모임으로 이루어지며 관계로 표현

| 절차적 프로그래밍(PP) | 객체지향 프로그래밍(OOP) | |
|---|---|---|
| 접근 방식 | Top-down | Bottom-up |
| 구현 방식 | 전체 기능 동작 고려 -> 각 기능 구현 | 객체 설계 -> 객체 상호 작용 설계 |
| 구성 요소 | 함수 | 객체 |
| 장점 | 객체 관련 오버헤드를 줄여 빠르게 동작 | 코드의 중복을 줄이고 재활용성이 높음, 구조 파악 및 디버깅이 쉬움 |
| 단점 | 구조가 복잡해지고 코드 중복이 심해짐, 순서를 지켜야 해서 재활용성이 떨어짐 | 설계에 많은 시간이 요구됨, 객체가 많아지면 오버헤드가 발생 할 수 있음 |
| 용도 | 한정된 자원/특수 목적(보안, 속도) | 대규모 협업 프로젝트(생산성 중시) |


// 상태 (State)
struct Dog{
string name = 뭉치;
string color = 갈색;
int weight = 20;
string type = 불독;
string feel = 배고픔;
};
// 행위 (Behavior)
void bark(Dog);
void eat(Dog);
void sleep(Dog);
void run(Dog);
void walk(Dog);

// Dog object(encapsulated)
name = 뭉치
color = 갈색
weight = 20kg
type = 불독
feel = 배고픔
void bark()
void eat()
void sleep()
void run()
void walk()

public class Dog {
// 멤버 변수
private String name;
private int color;
private String weight;
private String type;
private String feel;
// 멤버 함수
public void bark(){...};
public void eat(){...};
public void sleep(){...};
public void run(){...};
public void walk(){...};
// 생성자
public Dog(String name){
this.name = name;
}
public class Main{
public static void main(String[] args) {
Dog Molly = new Dog("Molly");
Dog lucy = new Dog("lucy");
Dog daisy = new Dog("daisy");
}
}
public calss StaticTest {
// class var
public static int classVar = 10;
// instance var
private int instanceVar;
public void method(){
int localVar = 100;
...
}
}

Static Area
classVar= 10
Stack Area
staticTest1{
localVar = 100
}
staticTest2{
localVar = 100
}
Heap Area
staticTest(instance){
instanceVar
}
staticTest(instance){
instanceVar
}
