-
절차지향(Procedural)과 객체지향(Object-Oriented, OOP)다시한번 개발자도전! 2026. 1. 13. 16:48
1. 절차지향 프로그래밍 (Procedural Programming)
말 그대로 **"순서대로 실행하는 것"**에 초점을 맞춤. 프로그램이 하나의 커다란 흐름(함수의 연속)으로 이루어져 있음
ex) c언어.
- 핵심: 데이터와 함수가 분리되어 있음.
- 방식: 위에서 아래로, 입력값(Input)을 넣으면 로직을 거쳐 출력값(Output)이 나옴.
- 비유: 요리 레시피 (1. 물을 끓인다 -> 2. 면을 넣는다 -> 3. 스프를 넣는다).
📋 절차지향 프로그래밍(PP) 장단점 비교
구분 장점 단점 속도 및 성능 실행 속도가 매우 빠름. 컴퓨터의 처리 방식과 유사해서 오버헤드가 적음. 데이터와 함수가 분리되어 있어, 규모가 커지면 관리가 불가능해짐. 메모리 효율 객체를 생성하는 비용이 없어서 메모리 소모가 적음. 코드의 순서가 조금만 바뀌어도 결과가 완전히 달라질 수 있어 위험함. 직관성 프로그램의 흐름이 위에서 아래로 흐르므로 작은 규모에서는 이해가 빠름. 특정 부분을 수정하면 연결된 다른 함수들까지 다 고쳐야 함. 설계 난이도 초기 설계가 비교적 단순하고 쉬움. 코드의 재사용성이 낮음. 똑같은 로직을 여기저기 복사해서 써야 하는 경우가 많음. 역사성 가장 오래된 방식이라 하드웨어 제어나 임베디드 분야에서 표준임. 대규모 팀 프로젝트나 복잡한 게임 시스템 개발에는 부적합함. ⬇️예시코드⬇️
더보기using System; class Program { // 데이터 (함수 밖에 따로 존재) static string slimeName = "슬라임"; static int slimeHp = 50; static string orcName = "오크"; static int orcHp = 100; static void Main() { // 순서대로 함수 호출 AttackSlime(20); AttackOrc(50); } // 로직 (데이터를 외부에서 받아와서 처리) static void AttackSlime(int damage) { slimeHp -= damage; Console.WriteLine($"{slimeName}이(가) {damage} 데미지를 입음! 남은 HP: {slimeHp}"); } static void AttackOrc(int damage) { orcHp -= damage; Console.WriteLine($"{orcName}이(가) {damage} 데미지를 입음! 남은 HP: {orcHp}"); } }
2. 객체지향 프로그래밍 (Object-Oriented Programming)
프로그램을 **"독립적인 객체들의 모임"**으로 보는 방식임. 유니티가 전형적인 객체지향 엔진임.
- 핵심: 데이터(변수)와 기능(메서드)을 **'객체'**라는 상자에 하나로 묶음(캡슐화).
- 방식: 객체끼리 서로 메시지를 주고받으며 상호작용함.
- 비유: 오케스트라 (각 악기 연주자가 자기 악보를 보고 연주하며 조화를 이룸).
📋 객체지향 프로그래밍(OOP) 장단점 비교
구분 장점 단점 유지보수 코드를 수정할 때 해당 객체만 고치면 되어 유지보수가 매우 쉬움. 설계가 잘못되면 시스템 전체 구조를 변경하기가 매우 힘들어짐. 생산성 상속을 통해 코드를 재사용할 수 있어 개발 속도가 빨라짐. 초기 설계 단계에서 많은 시간과 노력이 필요함. 안전성 캡슐화로 데이터를 보호하므로 버그 발생 확률이 줄어듦. 객체 간의 상호작용이 복잡해지면 코드의 흐름을 파악하기 어려울 수 있음. 대규모 협업 클래스 단위로 모듈화하여 업무를 나누기 좋아 팀 단위 개발에 유리함. 절차지향에 비해 코드의 크기가 커지고 실행 파일 용량이 증가할 수 있음. 성능 인간 친화적인 구조로 로직 이해가 빠름. 객체를 생성하고 관리하는 오버헤드 때문에 실행 속도가 상대적으로 느림. ⬇️예시코드⬇️
더보기using System; // 1. 설계도(클래스) 작성 class Monster { private string name; private int hp; public Monster(string name, int hp) // 생성자로 초기화 { this.name = name; this.hp = hp; } // 몬스터 스스로가 자기 데이터를 처리하는 기능(메서드) public void TakeDamage(int damage) { hp -= damage; Console.WriteLine($"{name}이(가) {damage} 데미지를 입음! 남은 HP: {hp}"); } } class Program { static void Main() { // 2. 객체 생성 (데이터와 로직이 합쳐진 실체) Monster slime = new Monster("슬라임", 50); Monster orc = new Monster("오크", 100); // 3. 객체에게 메시지 전달 (메서드 호출) slime.TakeDamage(20); orc.TakeDamage(50); } }
3. 차이점 비교
구분 절차지향 (PP) 객체지향 (OOP) 중심 함수(동작) 중심 객체(데이터+동작) 중심 데이터 처리 데이터가 여러 함수를 돌아다님 객체 내부에서 데이터 보호(캡슐화) 유지보수 코드 한 줄 바꾸면 전체가 꼬일 위험 높음 문제가 생긴 객체만 수정하면 됨 설계 난이도 직관적이고 쉬움 초기에 구조 설계가 복잡함 실행 속도 빠름 (컴퓨터 친화적) 상대적으로 느림 (사람 친화적) 
'다시한번 개발자도전!' 카테고리의 다른 글
다시한번 개발자도전! 9일차 (상속, 캐스팅,base,오버라이딩) (0) 2026.01.14 OOP 4대 원칙과 SOLID 5대 원칙 (0) 2026.01.13 다시한번 개발자도전! 8일차(클래스,생성자,접근제한자,프로퍼티) (0) 2026.01.13 c# 컬렉션(Collection)/List,Dictionary,Stack,Queue (3) 2026.01.12 다시한번 개발자도전! 7일차 (함수,재귀함수,메모리구조,ref,out) (0) 2026.01.12