객체 지향 vs 절차 지향 프로그래밍

2022. 7. 18. 20:57Java

절차 지향 프로그래밍  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();	// 따르릉
    }
}

 

 

'Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.07.21
정렬(Sort)  (0) 2022.07.19
JVM  (0) 2022.07.18
변수  (0) 2022.06.30
상수(final)  (0) 2022.06.30