728x90
절차 지향 (Procedual Programming)
- 물이 위에서 아래로 흐르듯이, 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
- 절차 지향도 제어문을 사용하면 실행 순서를 바꿀 수는 있지만, 이조차도 제어문의 절차로 진행되는 것이다
- 대표 언어 : C, ALGOL, COBOL, FORTRAN 등
절차 지향의 장점
- 이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다
절차 지향의 단점
- 유지보수 및 디버깅이 어렵다
- 실행 순서가 정해져 있기 때문에 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다
- 프로그램 분석 및 코드 수정이 어렵다
객체 지향 (Object Oriented Programming)
실제 세계를 모델링하여 소프트웨어를 개발하는 방법
데이터와 절차를 하나의 덩어리로 묶어서 생각한다 -> 컴퓨터 부품을 하나씩 사서 조립하는 느낌!
객체 지향 프로그래밍의 탄생 배경
- 옛날에는 하드웨어와 소프트웨어의 개발 속도 차이가 크지 않았다
- 하지만 하드웨어의 빠른 발전을 통해 컴퓨팅 환경은 급속도로 증가한 반면, 소프트퉤어 개발 시간이 따라오지 못하게 되었다
- 이런 상황에 소프트웨어의 개발 시간을 단축하되 하드웨어에 기본적인 사양을 잡아먹어도 더 이상 큰 단점이 아니기 때문에 모듈화, 캡슐화 등을 통해 개념적으로 접근하는 형태를 갖는 OOP가 탄생하였다
대표 언어 : Java, C++, Smalltalk 등
객체 지향의 장점
기능별로 모듈화 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 한다
또한 모듈을 재활용하기 때문에 하드웨어의 처리량을 줄여준다
디버깅이 쉽다
상속을 통한 재사용과 시스템의 확장이 용이하다
코드의 재활용성이 높다
사용자와 개발자 사이의 이해를 쉽게 해준다
소프트웨어 개발 및 유지보수가 용이하다
객체 지향의 단점
객체 지향 언어는 어떤 모듈의 한 기능만 필요하더라도 모듈 전체를 가져와야 하기 때문에 절차지향 프로그래밍보다 크기가 더 커질 수 있다
데이터의 접근이 상대적으로 절차지향보다 느려질 가능성이 높다
메소드를 통해서만 접근이 가능하기 때문에 절차지향식처럼 특정 함수에 접근할 수 없어 속도가 느리다
설계에 많은 시간이 소요된다
구현 시 처리 시간이 지연된다
객체 지향의 특성
- 추상화 (Abstraction)
- 세부적인 사물들의 공통적인 특징을 파악한 후, 하나의 집합으로 만들어 내는 것
- 필요로 하는 속성이나 행동을 추출한다
- 추상적인 개념에 의존하여 설계해야 유연함을 갖출 수 있다
- 캡슐화 (Encapsulation)
- 객체를 캡슐로 싸서 그 내부를 보호하고 볼 수 없게 하는 것으로, 객체의 가장 본질적인 특징이다
- 한 곳에서 변화가 일어나도 다른 곳에 미치는 영향을 최소화한다 -> 낮은 결합도 유지
- Java에서 클래스는 객체의 모양을 선언한 틀이며, 클래스 모양 그대로 생성된 실체(Instance)가 객체가 된다
- Java는 필드와 메소드를 클래스 내에 모두 구현하고 캡슐화를 통해 객체 내 필드에 대한 외부로부터의 접근을 제한한다
- 상속 (Inheritance)
- 일반화 관계(Generalization)라고도 하며, 여러 개체들이 지닌 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립하는 과정이다
- 자식 클래스를 외부로부터 은닉하는 캡슐화의 일종
- 자식 클래스를 캡슐화해두면 외붸서 이러한 클래스들에 영향을 받지 않고 개발을 할 수 있는 장점이 있다
- 다형성 (Polymorphism)
- 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
- 객체 지향의 핵심으로, 상속과 함께 활용할 경우 코드를 간결하게 해주고 유연함을 갖추게 해준다
- 부모 클래스의 메소드를 자식 클래스가 오버라이딩(재정의)해서 자신의 역할에 맞게 활용하는 것이다
- 구체적으로 현재 어떤 클래스 객체가 참조되는 지는 무관하게 개발이 가능하다
💡객체지향 vs 절차지향
728x90
'야미스터디 > Java' 카테고리의 다른 글
[Java] 접근 제한자 / 생성자 / SOLID 📌 (0) | 2022.08.06 |
---|---|
[JAVA] static 변수 (0) | 2022.07.26 |
[JAVA] RuntimeException (0) | 2022.07.21 |
[JAVA] 정규 표현식 (0) | 2022.04.18 |
[JAVA] Arrays.sort vs Collections.sort (0) | 2022.02.07 |
댓글