-
[프로그래밍 언어] 절차적 프로그래밍 vs 객체지향 프로그래밍프로그래밍 언어/개념 2021. 6. 7. 01:24
절차적 프로그래밍(Procedural Programming)
객체지향 프로그래밍에 대조되는 것으로 생각하여 절차지향 프로그래밍으로 알고 있는 사람이 많은데, "절차지향 프로그래밍 = 절차적 프로그래밍" 이며, "절차적 프로그래밍"이 조금 더 맞는 단어이다. 또한 절차적 프로그래밍과 객체지향 프로그래밍은 반대되는 단어가 절.대.로 아님을 이해해야 한다.
절차적 프로그래밍이란 Procedure(프로시저)를 이용하여 작성하는 프로그래밍 스타일이다. Procedure의 목록으로는 루틴, 서브루틴, 메소드, 함수 등이 있다.
간단히 보는 procedure의 목록
- 루틴: main 문
- 서브루틴: main문 밖에서 정의한 코드 블럭 중에 반환 값이 없는 것
- 함수: main문 밖에서 정의한 코드 블럭 중에 반환 값이 있는 것
절차적 프로그래밍은 순차적인 처리를 중요시 여기며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다.
절차적 프로그래밍의 장점
- 모듈 구성이 용이하며 구조적인 프로그래밍이 가능하다
- 컴퓨터의 처리구조와 유사해 실행 속도가 빠르다.
절차적 프로그래밍의 단점
- 유지보수가 어렵다.
- 정해진 순서대로 입력을 해야하므로 순서를 바꾸면 결과값을 보장할 수 없다.
- 코드가 길어지면 가독성이 무척 떨어지며 이해하기가 힘들다.
- 대형 프로젝트에 부적합하다.
절차적 프로그래밍의 종류
1. C
- 고급 프로그래밍 언어이면서 저급 프로그래밍 언어의 특징을 모두 갖췄다. (여기서 고급, 저급은 사용자 친화적인지, 유저 친화적인지에 대한 척도입니다.)
- 컴파일러 방식의 언어이다.
- 이식성이 좋아 컴퓨터 기종에 관계업싱 프로그램을 작성할 수 있다.
2. ALGOL
- 수치 계산이나 논리 연산을 위한 과학 기술 계산용 언어이다
- PASCAL과 C언어의 모체가 되었다.
3. COBOL
- 사무 처리용 언어이다.
- 영어 문장 형식으로 구성되어 이해와 사용이 쉽다.
4. FORTRAN
- 과학 기술 계산용 언어이다.
- 수학과 공학 분야의 공식이나 수식과 같은 형태로 프로그래밍 할 수 있다.
그러다 찾아온 소프트웨어 위기
Software crisis(소프트웨어 위기)
소프트웨어의 급격한 발전이 이루어졌다. 그로 인해 소프트웨어의 규모가 커지고, 복잡해졌으며 커져버린 프로젝트를 더 이상 절차지향 프로그래밍을 통해 소화할 수 없었고, 품질이 낮아졌다.
대안으로 객체지향 프로그래밍을 개발하여 사용하게 되었다.
객체지향 프로그래밍(Object Oriented Programming)
절차적 프로그래밍을 보완한 새로운 패러다임
프로그래밍에 필요한 속성(attribute)과 메서드(method)를 가진 클래스(class)를 정의하고, 정의된 클래스를 통해서 각각의 객체(object)를 생성하여, 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
도형으로 간단하게 알아보는 OOP 키워드
- class(클래스): 해당 객체 attribute와 method가 정의되어 있는 코드 블럭
- 이제부터 사각형이라는 도형을 정의해볼게.
사각형은 가로와 세로와 꼭지점의 위치와 색깔을 통해 그릴 수 있어.
그리고 사각형을 만들었으면, 사각형의 위치를 바꾸거나 크기를 조절 하거나 색칠을 할 수 있단다.
- 이제부터 사각형이라는 도형을 정의해볼게.
- attribute(속성): 해당 객체가 가진 변수 값.
- 가로의 길이, 세로의 길이, 꼭지점의 위치, 색깔 등
- method(메서드): 해당 객체를 통해 할 수 있는 행동(함수).
- 빨간색으로 색칠하기, 가로의 길이를 수정하기, 세로의 길이를 반환하기 등
- object(객체): 해당 클래스를 기반으로 생성된 물체들을 모두 지칭 하는 것. (=instance)
- 이 사각형1(객체)은 가로가 3이고 세로가 5고 빨간색이고, 왼쪽 밑 꼭지점은 (1,2)야
이 사각형2(객체)는 가로가 2고 세로가 3이고 파란색이며, 왼쪽 밑 꼭지점은 (5,3)이야
- 이 사각형1(객체)은 가로가 3이고 세로가 5고 빨간색이고, 왼쪽 밑 꼭지점은 (1,2)야
OOP의 3대 특성
OOP의 3대 특성으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이 있다.
- 서브웨이로 간단하게 알아보는 OOP 3대 특성
- Encapsulation(캡슐화): 변수와 함수를 클래스로 묶어논 것을 의미한다. 캡슐화를 통해 Information Hiding(정보은닉)의 이점을 얻는다.
- 저희 샌드위치는 양상추, 토마토, 양파, 피망, 오이가 기본으로 들어 있으며(변수), 당신은 빵을 고르고(함수), 빵을 구울지 말지 선택하고(함수), 추가하거나 뺄 야채를 고르고(함수), 소스를 골라야합니다(함수)
- Information Hiding(정보은닉): 클래스 안에 변수와 함수를 숨기며, 변수와 함수의 작동에 대해 알려주지 않고도 정상 작동을 하게 된다
- 빵을 굽길 원하시는군요(함수 호출). 지금 구워드리겠습니다(함수).
하지만 빵을 몇도에서 몇초간 굽는지는 굳이 모르셔도 됩니다.(정보은닉)
- 빵을 굽길 원하시는군요(함수 호출). 지금 구워드리겠습니다(함수).
- Inheritance(상속): 이미 작성된 클래스를 이어 받아서 새로운 클래스를 생성하는 기법. 코드의 재활용성을 굉장히 높여준다.
- 상속이 없는 경우
에그마요 샌드위치에는 빵과 기본 야채와 소스와 에그마요가 들어갑니다.
미트볼 샌드위치에는 빵과 기본 야채와 소스와 미트볼이 들어갑니다 - 상속이 있는 경우
저희 샌드위치는 기본적으로 빵과 기본 야채와 소스로 이루어져 있습니다(이미 작성된 클래스)
여기에 에그마요가 들어가면 에그마요 샌드위치입니다(이어 받은 새로운 클래스)
아니면 여기에 미트볼을 넣으면 미트볼 샌드위치입니다(이어 받은 새로운 클래스)
- 상속이 없는 경우
- Polymorphism(다형성): 같은 이름의 변수, 혹은 함수가 상황에 따라 다른 의미로 해석될 수 있다는 것
Polymorphism 특성으로 인해 Overriding(오버라이딩), Overloading(오버로딩)이 가능하다.- Overriding(오버라이딩): 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용
- 저희는 샌드위치에는 보통 A소스가 잘 어울려요.("샌드위치"라는 상위 클래스의 '소스 추천')
에그마요에는 B소스가 잘 어울리고요("에그마요 샌드위치"라는 하위 클래스의 '소스 추천')
미트볼에는 C소스가 잘 어울립니다("미트볼 샌드위치"라는 하위 클래스의 '소스 추천')
- 저희는 샌드위치에는 보통 A소스가 잘 어울려요.("샌드위치"라는 상위 클래스의 '소스 추천')
- Overloading(오버로딩): 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다를 때 다르게 동작하도록 하는 것.
- 결제 진행하겠습니다.('결제' 메소드)
카드 받았습니다. 영수증 필요하신가요? ('카드'를 받았을 때 '결제' 메소드)
현금 만원 받았습니다. 여기 거스름돈입니다. ('현금'을 받았을 때 '결제' 메소드)
- 결제 진행하겠습니다.('결제' 메소드)
- Overriding(오버라이딩): 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용
- Encapsulation(캡슐화): 변수와 함수를 클래스로 묶어논 것을 의미한다. 캡슐화를 통해 Information Hiding(정보은닉)의 이점을 얻는다.
객체지향 프로그래밍의 장점
- 코드의 재사용성이 높아졌다.
- 유지보수가 쉬워졌다.
- 클래스를 한 번 이해하면 코드의 가독성이 높아진다.
- 대형프로젝트에 적합해졌다.
객체지향 프로그래밍의 단점
- 처리속도가 절차지향보다는 느리다
- 객체가 많아지면 용량이 커질 수 있다
- 설계시 많은 시간과 노력이 필요하다.
객체지향 프로그래밍 언어의 종류
1. JAVA
- 분산 네트워크 환경에 적용이 가능하며 멀티 스레드 기능을 제공하여 여러 작업을 동시에 처리할 수 있다.
- 운영체제 및 하드웨어에 독립적이며, 이식성이 강하다.
- 캡슐화가 가능하고 재사용성이 높다.
2. C++
- C언어 + 객체지향 개념
- 모든 문제를 객체로 모델링하여 표현한다.
3. Smalltalk
- 1세대 객체지향 프로그래밍 언어 중 하나로 순수한 객체 지향 프로그래밍 언어이다.
- 최초로 GUI를 제공한 언어이다.
개인적으로 공부하면서 적은 내용이므로 정확하지 않을 수 있습니다.
틀린 내용이 있다면 언제든지 댓글로 지적해주시면 감사합니다.
'프로그래밍 언어 > 개념' 카테고리의 다른 글
[프로그래밍 언어] 선언형 언어 (0) 2021.06.10 [프로그래밍 언어] 스크립트 언어 (0) 2021.06.09