[CS] 절차적, 객체지향, 관점지향 프로그래밍

박연주·2022년 9월 5일
0

Computer Science

목록 보기
2/13

절차적 프로그래밍(Procedural Programming)

  • 절차적 프로그래밍이란 Procedure(프로시저)를 이용하여 작성하는 프로그래밍 스타일이다. Procedure의 목록으로는 루틴, 서브루틴, 메소드, 함수 등이 있다.
    	루틴: main 문
    	서브루틴: main문 밖에서 정의한 코드 블럭 중에 반환 값이 없는 것
    	함수: main문 밖에서 정의한 코드 블럭 중에 반환 값이 있는 것
  • 절차적 프로그래밍은 순차적인 처리를 중요시 여기며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다.

장점

모듈 구성이 용이하며 구조적인 프로그래밍이 가능하다
컴퓨터의 처리구조와 유사해 실행 속도가 빠르다.

단점

유지보수가 어렵다.
정해진 순서대로 입력을 해야하므로 순서를 바꾸면 결과값을 보장할 수 없다.
코드가 길어지면 가독성이 무척 떨어지며 이해하기가 힘들다.
대형 프로젝트에 부적합하다.


객체지향 프로그래밍(Object Oriented Programming)

  • 절차적 프로그래밍을 보완한 새로운 패러다임
  • 프로그래밍에 필요한 속성(attribute)과 메서드(method)를 가진 클래스(class)를 정의하고, 정의된 클래스를 통해서 각각의 객체(object)를 생성하여, 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
- class: 해당 객체 attribute와 method가 정의되어 있는 코드 블럭
이제부터 사각형이라는 도형을 정의해볼게.
사각형은 가로와 세로와 꼭지점의 위치와 색깔을 통해 그릴 수 있어.
그리고 사각형을 만들었으면, 사각형의 위치를 바꾸거나 크기를 조절 하거나 색칠을 할 수 있단다.

- attribute(속성): 해당 객체가 가진 변수 값.
가로의 길이, 세로의 길이, 꼭지점의 위치, 색깔 등

- method(메서드): 해당 객체를 통해 할 수 있는 행동(함수).
빨간색으로 색칠하기, 가로의 길이를 수정하기, 세로의 길이를 반환하기 등

- object(객체): 해당 클래스를 기반으로 생성된 물체들을 모두 지칭 하는 것. (=instance)
이 사각형1(객체)은 가로가 3이고 세로가 5고 빨간색이고, 왼쪽 밑 꼭지점은 (1,2)야
이 사각형2(객체)는 가로가 2고 세로가 3이고 파란색이며, 왼쪽 밑 꼭지점은 (5,3)이야

OOP의 3대 특성

OOP의 3대 특성으로는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이 있다.
서브웨이로 간단하게 알아보는 OOP 3대 특성
Encapsulation(캡슐화): 변수와 함수를 클래스로 묶어논 것을 의미한다. 캡슐화를 통해 Information Hiding(정보은닉)의 이점을 얻는다.
저희 샌드위치는 양상추, 토마토, 양파, 피망, 오이가 기본으로 들어 있으며(변수), 당신은 빵을 고르고(함수), 빵을 구울지 말지 선택하고(함수), 추가하거나 뺄 야채를 고르고(함수), 소스를 골라야합니다(함수)
Information Hiding(정보은닉): 클래스 안에 변수와 함수를 숨기며, 변수와 함수의 작동에 대해 알려주지 않고도 정상 작동을 하게 된다
빵을 굽길 원하시는군요(함수 호출). 지금 구워드리겠습니다(함수).
하지만 빵을 몇도에서 몇초간 굽는지는 굳이 모르셔도 됩니다.(정보은닉)
Inheritance(상속): 이미 작성된 클래스를 이어 받아서 새로운 클래스를 생성하는 기법. 코드의 재활용성을 굉장히 높여준다.
상속이 없는 경우
에그마요 샌드위치에는 빵과 기본 야채와 소스와 에그마요가 들어갑니다.
미트볼 샌드위치에는 빵과 기본 야채와 소스와 미트볼이 들어갑니다
상속이 있는 경우
저희 샌드위치는 기본적으로 빵과 기본 야채와 소스로 이루어져 있습니다(이미 작성된 클래스)
여기에 에그마요가 들어가면 에그마요 샌드위치입니다(이어 받은 새로운 클래스)
아니면 여기에 미트볼을 넣으면 미트볼 샌드위치입니다(이어 받은 새로운 클래스)
Polymorphism(다형성): 같은 이름의 변수, 혹은 함수가 상황에 따라 다른 의미로 해석될 수 있다는 것
Polymorphism 특성으로 인해 Overriding(오버라이딩), Overloading(오버로딩)이 가능하다.
Overriding(오버라이딩): 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용
저희는 샌드위치에는 보통 A소스가 잘 어울려요.("샌드위치"라는 상위 클래스의 '소스 추천')
에그마요에는 B소스가 잘 어울리고요("에그마요 샌드위치"라는 하위 클래스의 '소스 추천')
미트볼에는 C소스가 잘 어울립니다("미트볼 샌드위치"라는 하위 클래스의 '소스 추천')
Overloading(오버로딩): 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다를 때 다르게 동작하도록 하는 것.
결제 진행하겠습니다.('결제' 메소드)
카드 받았습니다. 영수증 필요하신가요? ('카드'를 받았을 때 '결제' 메소드)
현금 만원 받았습니다. 여기 거스름돈입니다. ('현금'을 받았을 때 '결제' 메소드)

장점

코드의 재사용성이 높아졌다.
유지보수가 쉬워졌다.
클래스를 한 번 이해하면 코드의 가독성이 높아진다.
대형프로젝트에 적합해졌다.

단점

처리속도가 절차지향보다는 느리다
객체가 많아지면 용량이 커질 수 있다
설계시 많은 시간과 노력이 필요하다.

절차적, 객체지향 프로그래밍

profile
하루에 한 개념씩

0개의 댓글