📌 객체지향의 등장 배경
순차적 프로그래밍 ➡ 절차적 프로그래밍 ➡ 객체지향 프로그래밍
1. 순차적 ( 비구조적 ) 프로그래밍
- 하나의 함수나, 코드 몸체에 연속된 코드를 작성하는 프로그래밍 패러다임
- A ➡ B ➡ C 같이 코드를 작성하다 A로 돌아가야하면 goto문을 사용하여 특정 위치로 건너뛸 수 있다.
- 초기 프로그래밍 언어들에서 주로 보인다.
👍 장점 : 흐름이 눈으로 보이기 때문에 매우 직관적이다.
👎 단점 : 규모가 커질수록 유지보수가 어렵고 흐름이 복잡해져서 코드 파악이 어려워진다
또한 코드의 재사용성을 떨어뜨린다.
💻 순차적 프로그래밍 사용 언어 : 어셈블리어2. 절차적 ( 구조적 ) 프로그래밍
💡 무엇을 어떤 절차로 할 것인가
- 코드의 위에서 아래로만 진행되도록 절차와 순서를 갖게 하는 패러다임
- 비구조적 프로그래밍의 문제점을 보완하고자 등장함
- 프로그램의 순서와 흐름을 먼저 세우고
반복되는 동작을 함수 및 프로시저(리턴값이 없는 함수) 형태로 모듈화하여 사용하는 방식이다.- 실행 순서 ( 절차 )가 중점이 된다.
- 순차 ➡ 선택 ➡ 반복 의 구조를 반복해가며 코드를 진행한다.
장점👍 : 프로젝트가 커질 시 구조가 복잡해지고중복 코드를 작성할 수도 있다
단점👎 : 컴퓨터 눈높이로 구성된 문법으로 바닥부터 입맛대로 설계하기 용이하다
💻 절차적 프로그래밍 사용 언어 : C, Visual Basic, Fortran, Pascal
객체 또는 오브젝트(object)는 클래스에서 정의한 것을 토대로 메모리(실제 저장공간)에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료 구조, 함수 또는 메소드가 될 수 있다. 프로그래밍 언어는 변수를 이용해 객체에 접근하므로 객체와 변수라는 용어는 종종 함께 사용된다. 그러나 메모리가 할당되기 전까지 객체는 존재하지 않는다.
나무위키
💡 누가 어떤 일을 할 것인가
- 어떤 개념에 대한 자료형과 함수를 객체 형태로 함께 묶어서 관리하기 위해 등장한 패러다임
- 객체 내부에 자료형 필드와 함수(매서드)가 함께 존재함
- 장점👍
- 코드의 재사용성
- 간편한 유지보수
- 큰 규모의 프로그래밍에 유리함
- 단점👎
- 느린 속도
- 높은 설계역량의 요구
- 코드의 잠재적인 복잡성
- 💻 절차적 프로그래밍 사용 언어 : C++ , C# , Java , Python , JavaScript , Ruby , Swift
- 객체의 공통 속성,기능을 클래스로 정의하는 것
( 어떠한 기능 중 핵심적인 기능을 추출하여 이를 일반화하는 것 )
- 객체들의 복잡도를 관리할 수 있으며, 유연한 설계가 가능하다.
- 장점👍
- 복잡도를 관리할 수 있다
- 유연한 설계가 가능하다.
- 코드를 간결하게 해 준다.
- 단점👎
- 내부파악 및 수정이 어렵다.
- 성능 저하
- 클래스의 내부 변수와 매소드를 하나로 패키징하는 것
- 정보 은닉🔒
- 객체의 내부 구현을 숨기으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다.
- 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다.
- 장점👍
- 객체의 모듈화가 잘 되어있을 때 재사용이 매우 편하고 간편한 유지보수가 가능하다.
- 부모 클래스가 가진 함수, 데이터 등을 자식 클래스가 그대로 물려받는 것 or 살짝 다듬어서 사용할 수 있게 하는 것
- 이미 작성된 클래스를 받아서 새로운 클래스를 생성
- 장점👍
- 외부에선 개별적인 자식 클래스들과 무관하게 개발을 이어갈 수 있다.
- 코드 재사용이 용이해진다.
- 단점👎
- 부모 클래스에 의존하는 자식 클래스가 많아졌을 때 부모 클래스를 변경시
의존하고 있는 자식 클래스 들이 영향을 받는다.- 같은 종류의 클래스가 아닌 다른 종류의 클래스를 재사용하기 위해 상속을 받으면
문제가 발생할수 있다.
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
- 어떠한 요소에 여러 개념을 넣어 놓는 것