객체 지향 vs 절차 지향 프로그래밍
2022. 7. 18. 20:57ㆍJava
절차 지향 프로그래밍 vs 객체 지향 프로그래밍
절차 지향 프로그래밍: 코드를 순차적으로 구성하여 프로그래밍 하는 것
장점: 코드의 흐름이 보여 직관적이고 빠릅니다.
단점: 모든 코드들이 유기적으로 연결되어 있어 코드 수정 및 유지보수가 어렵습니다.
객체 지향 프로그래밍: 코드를 객체 단위로 나누어 구성하여 프로그래밍 하는 것.
장점: 유지보수가 쉽고, 코드의 재사용성이 높습니다.
단점: 절차지향 프로그램에 비해 느리고, 클래스를 구성하는데 시간이 오래 걸린다.
클래스 and 객체
클래스: 객체를 정의해 놓은 것 | 객체: 실제로 존재하는 것. 사물 또는 개념 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
+ 객체와 인스턴스
> 객체(Object) 는 인스턴스(instance)를 포함하는 일반적인 의미입니다.
ex) 책상은 객체다.
ex) 책상은 책상 클래스의 인스턴스다.
> 객체와 인스턴스는 같은 의미이므로 두 용어의 사용을 엄격히 구분할 필요는 없지만, 위처럼 문맥에 따라 구별하여 사용하는 것이 좋습니다.
객체 지향 프로그래밍의 4가지 특성
- 객체 지향에서는 캡슐화, 추상화, 상속, 다형성 이렇게 4가지 특징이 있습니다.
캡슐화:
- 외부에서 접근할 필요 없는 메서드나 변수의 접근 제어자를 private로 설정하여 객체 내부를 공개하지 않는 방법입니다.
- 객체 내부의 어떤 동작에 대한 구현이 어떻게 되었는지 감추어 외부에서 객체를 손상시키는 일을 방지합니다.
- 높은 응집도, 낮은 결합도를 목표로 합니다.
- 즉, 클래스의 목적에 부합하는 같은 영역의 메소들들로 구성되고, 클래스 간 결합도는 낮춰야 합니다.
접근제어자: 변수나 메서드의 사용권한입니다.
접근제어자 | 클래스 내부 | 패키지 | 상속받은 클래스 | 이외의 영역 |
private | O | X | X | X |
default | O | O | X | X |
protected | O | O | O | X |
public | O | O | O | O |
추상화:
- 객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출해내는 작업입니다.
- 예를들어 강아지 클래스를 만든다고 가정했을 때,
- 강아지들의 공통적인 특징을 파악한 후 (이름, 종, 나이) 하나의 묶음(클래스)로 만들어 내는 것입니다.
상속:
- 여러 개체들이 지닌 공통된 특성을 하나의 법칙으로 일반화하는 과정입니다.
다형성:
- 서로 다른 클래스의 객체가 같은 동작 수행 명령을 받았을 때, 각자의 특성에 맞는 방식으로 동작하는 것입니다.
class Car {void horn() {System.out.println("빵빵");}}
class 구급차 extends Car {void horn() {System.out.println("위용위용");}}
class 경찰차 extends Car {void horn() {System.out.println("삐용삐용");}}
class 자전거 extends Car{void horn() {System.out.println("따르릉"); }}
public class Main{
public static void main(String[] args) {
Car car1 = new Car();
구급차 car2 = new 구급차();
경찰차 car3 = new 경찰차();
자전거 car4 = new 자전거();
car1.horn(); // 빵빵
car2.horn(); // 위요위용
car3.horn(); // 삐용삐용
car4.horn(); // 따르릉
}
}