절차 중심 프로그래밍(Procedure Programming)
어떤 문제를 해결하기 위한 과정을 순차적으로 설계하는 것
재사용성을 높이기 위해 함수 또는 프로시저라는 작은 단위로 나누어 작성한다.
절차와 데이터가 분리되어 있는 경우가 많고, 관리가 어렵다
Pascal, FORTRAN, C 등...
객체 지향 언어(OOP;Object-Oriented Programming)
기존의 절차 중심 프로그래밍의 재사용성을 개선한 방법
데이터와 코드를 객체로 함께 구성해서 한 개의 자료형으로 취급한다.
클래스 혹은 객체들의 집합으로 프로그램이 작성된다.
컴퓨터 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(Object)'라는 기본 단위로
나누고 이 객체들이 서로 메시지를 주고 받으며 데이터를 처리할 수 있는 방식
* 객체 : 하나의 역할을 수행하는 '메소드와 변수(데이터)‘의 묶음
OOP의 장점
소프트웨어의 생산성 향상
객체 지향 언어는 상속, 다형성, 객체, 캡슐화 등 소프트웨어 재사용을 위한 여러 장치가 내장되어 있다.
소프트웨어의 재사용과 부분 수정을 통해 소프트웨어를 다시 만드는 부담을 대폭 줄임으로써 소프트웨어의 생산성이 향상된다.
실세계에 대한 쉬운 모델링
과거에는 수학 계산/통계 처리를 하는 등의 처리 과정, 계산 절차가 중요했다. 하지만 현재는 컴퓨터 프로그래밍이 산업 전반에 활용됨으로써 실세계에서 발생하는일을 프로그래밍하고 있다. 실세계에서는 절차나 과정보다 일과 관련된 물체(객체)들의 상호 작용으로 묘사하는 것이 용이하다.
따라서 실세계의 일을 보다 쉽게 프로그래밍하기 위한 객체 중심의 객체 지향 언어가 탄생한 것이다.
객체(Object)
상태(state) + 동작(behavior)
상태 : 객체의 속성, 필드(field)로 구현된다.
동작 : 객체가 할 수 있는 동작, 메소드(method)로 구현된다.
OOP의 3가지 특징
캡슐화(Encapsulation)
내부를 드러내지 않고 외부에 보이는 부분만으로 충분히 사용할 수 있도록 만드는 작업
관련된 데이터와 알고리즘을 하나의 덩어리로 묶는다.
메소드(함수)와 데이터 클래스 내에 선언하고 구현한다.
외부에서는 공개된 메소드의 인터페이스에만 접근이 가능하며, 메소드의 구현 세부를 알 수 없다.
정보 은닉(information hiding) : 객체를 캡슐로 싸서 객체의 내부를 보호하는 것이다. 이를 통해 객체의 실제 구현 내용을 외부에 감출 수 있다.
상속(Inheritance)
이미 작성된 클래스(부모 클래스)를 이어받아서 새로운 클래스(자식 클래스)를 생성하는 기법
기존의 코드를 재활용 또는 기존 타입을 확장한다.
상위 클래스의 특성을 하위 클래스가 물려받게 된다.
* 상위 클래스 = super class
* 하위 클래스 = sub class : 슈퍼 클래스 코드를 재사용 한 것이다. 새로운 특성 추가가 가능하다.
다형성(Polymorphism)
동일한 이름으로 많은 상황에 대처하는 기법
슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현하는 메소드 오버라이딩(overriding)으로 구현 가능하다.
클래스
객체의 속성과 행위 선언
붕어빵 틀과 같다.
객체
클래스에서 찍어낸 실체
메모리 공간을 갖는 구체적인 실체
클래스를 구체화한 객체를 인스턴스(instance)라고 부른다.
객체와 인스턴스는 같은 뜻으로 사용된다.
-참고
https://dis.dankook.ac.kr/lectures/java21/wp-content/uploads/sites/78/2021/03/java1-lecture5.pdf
'CS' 카테고리의 다른 글
MVC 패턴 (0) | 2022.09.16 |
---|---|
함수형 프로그래밍 (0) | 2022.09.16 |
TDD (0) | 2022.09.16 |
RESTFul API (0) | 2022.09.16 |
좋은 코드란 무엇인가? (0) | 2022.09.16 |