-
[프로그래밍 패러다임] 절차지향 VS 객체지향우아한 테크코스/테크코스 2020. 3. 14. 11:51반응형
프로그래밍
소프트웨어를 구성하는 데이터와 데이터를 조작하는 코드를 작성하는 것, 데이터를 조작하는 코드를 별도로 분리하여 함수나 프로시저와 같은 형태로 만듦
절차 지향 - Procedural Oriented
절차 지향이란?
절차 지향(Procedural Oriented) 프로그래밍 : 각 프로시저들이 데이터를 조작하는 방식으로 코드를 작성. 프로시저는 다른 프로시저를 사용할 수도 있고, 각각의 프로시저가 같은 데이터를 사용할 수 있음. 프로시저(procedure)로 프로그램을 구성하는 기법
각 프로시저는 데이터를 사용해서 기능을 구현하며, 필요에 따라 다른 프로시저를 사용하기도 함. 또한 여러 프로시저가 동일한 데이터를 공유함
예시 - 시험 성적 관리 프로그램
성적 평균을 계산하고 출력하기 위한 프로그램
- 평균 계산 프로시저 : 각 과목의 점수가 보관된 데이터를 읽어서 합을 구한 후, 평균 값을 계산. 계산된 평균값은 다른 데이터로 생성
- 화면 출력 프로시저 : 평균 계산 프로시저가 생성한 평균 값 데이터와 과목 점수 데이터를 이용하여 성적을 출력
장점
예제의 '평균 계산 프로시저'와 '화면 출력 프로시저'는 데이터를 공유하여 사용, 다수의 프로시저들이 데이터를 공유하는 방식으로 만들어지기 때문에,, 절차 지향 프로그램은 자연스럽게 데이터를 중심으로 구현하게 됨
데이터와 그 데이터를 사용하는 프로시저를 작성하는 것은 자연스러운 과정이므로, 최초에 절차 지향적으로 코드를 구현하는 것이 쉬움
단점
프로그램 규모가 커져 데이터의 종류가 증가하고, 사용하는 프로시저가 증가하게 된다면 문제들이 발생할 수 있음(생각보다 흔하게 발생). 이로 인해 새로운 요구사항이 생겨서 프로그램의 한 곳을 수정하면 다른 곳에서 문제가 발생하고, 다시 그 곳을 수정하면 또 다른 곳에서 문제가 발생하는 악순환이 발생하기도 함. 이는 결국 코드의 수정을 어렵게 만들고, 새로운 기능을 추가하는데 많은 구현 시간(즉, 개발 비용)을 투입하게 만듦
1. 데이터 타입이나 의미를 변경해야 할 때, 함께 수정해야 하는 프로시저가 증가
한 데이터를 사용하는 프로시저가 많아질수록 그 데이터의 타입을 변경하기 어려워짐
- 예시) On Off 관리 - boolean 타입의 isOn 데이터
> 이 데이터를 사용하는 프로시저는 모두 isOn을 boolean으로 저장함
> 요구사항이 변경되어 On Off에 Wait를 추가해야 함 => boolean에서 열거타입으로 변경
> 해당 데이터를 사용하는 모든 프로시저의 저장 타입을 boolean에서 열거타입으로 변경해야 함
2. (더 안좋은 경우) 같은 데이터를 프로시저들이 서로 다른 의미로 사용하는 경우가 발생
프로그램 규모가 커질수록 같은 데이터를 서로 다른 의미로 사용하는 경우가 발생할 가능성이 높음
- 예시) 서비스 만료일 데이터
> 만료 확인 프로시저 : 서비스 만료일 데이터가 null인 경우 이를 오류로 처리하도록 생성
> 회원 정보 프로시저 : 서비스를 무한정 사용한다는 의미로 서비스 만료일을 설정
> 만료 확인 프로시저 - null이 들어가면 오류를 발생
객체 지향
절차 지향과 달리 데이터 및 데이터와 관련된 프로시저를 객체(object)라고 불리는 단위로 묶음, 객체 지향 기법으로 작성된 프로그램은 객체들로 구성
객체 : 프로시저를 실행하는데 필요한 만큼의 데이터를 가지며, 객체들이 모여 프로그램을 구성, 자신만의 기능을 제공하며, 각 객체들은 서로 연결되어 다른 객체가 제공하는 기능을 사용할 수 있게 됨. 다른 객체에 기능을 제공하기 위해 프로시저(자바 : 메서드)를 사용
객체의 프로시저 : 자신이 속한 객체의 데이터에만 접근 가능하며 다른 객체에 속한 데이터에는 접근할 수 없음
단점
데이터를 공유하는 절차지향과 달리 객체별로 데이터와 프로시저를 알맞게 정의해야하고, 프로그램의 규모가 작을 떄에는 절차 지향 방식보다 복잡한 구조를 갖게 됨
즉, 설계시 더 많은 노력이 들어갈 수 있음
장점
객체의 데이터를 변경하더라도 해당 객체로만 변화가 집중되고 다른 객체에는 영향을 주지 않기 때문에, 요구 사항의 변화가 발생했을 때 절자 지향 방식보다 프로그램을 더 쉽게 변경할 수 있음
프로그램을 상대적으로 쉽게 수정할 수 있는 유연함을 제공하기 때문에, 변화된 요구 사항을 빠르게 반영할 수 있음
반응형'우아한 테크코스 > 테크코스' 카테고리의 다른 글
[객체지향] 다형성 & 추상화 (0) 2020.03.16 [프로그래밍 패러다임] 객체 지향 프로그래밍 (0) 2020.03.14 [IntelliJ] 테스트 커버리지 확인하기 (0) 2020.03.13 [IntelliJ] 상수 추출 private으로 설정하기 (1) 2020.03.13 [Git] Remote(원격) Repo 송수신 (0) 2020.03.09