패러다임 발전과정
순차적 프로그래밍
- 말 그래도 순차적으로 코딩해 나가는 방법이다.
- 필요한 것이 있으면 계속 순서대로 추가해가며 구현하는 방식이다.
문제점: 점점 규모가 커지게 되면 나중에 어떻게 코드가 연결되어 있는지 확인조차 하지 못하게 될 가능성이 존재한다.
" 코딩보다 흐름을 이해하는 데 시간을 다 소비할 가능성이 크다 "
절차적, 구조적 프로그래밍
- 반복될 가능성이 있는 것들을 재상요이 가능한 함수로 만들어 사용하는 방법이다.
- 절차는 함수를 뜻하고, 구조는 모듈을 뜻한다.
문제점: 너무 추상적이다. 함수는 논리적 단위로 표현되지만, 실제 데이터에 해당하는 변수나 상수 값들은 물리적 요소로 되어있기 때문이다. 즉 논리적, 물리적 단위를 함께 묶을 수 있는 방법이 필요하게 된다.
객체 지향 프로그래밍
- 논리적 단위의 함수와 물리적 단위의 자료형을 객체로 함께 묶어서 관리하는 방법
- 클래스로 선언된 객체 내부에 자료형과 함수가 같이 존재한다.
- 객체 간의 독립성이 생기고 중복코드의 양이 줄어들고, 독립성이 확립되면 유지보수에도 도움이 된다.
객체 지향 프로그래밍의 특징
1. 추상화
2. 캡슐화
3. 상속
4. 다형성
1. 추상화
가. 필요로 하는 속성이나 행동을 추출하는 작업
나. 세부적인 사물들의 공통적인 특징을 파악한 후 하나의 집합으로 만들어 내는 것이 추상화이다.
다. 중복코드의 양이 줄어들고, 유지보수에도 도움이 된다.
ex) 아우디, BMW, 벤츠는 모두 '자동차'라는 공통점이 있는데, 자동차라는 추상화 집합을 만들어두고, 자동차들이 가진 공통적인 특징들을 만들어 활용한다.
2. 캡슐화
* 캡슐화는 응집도를 높이고 결합도를 낮출 수 있는 기능이다.
가. 응집도와 결합도
결합도: 어떤 기능을 실행할 때 다른 클래스나 모듈에 얼마나 의존적인가를 나타내는 말
응집도: 객체, 모듈간의 요소가 밀접한 관련이 있는 것으로 구성하는 것
1) 한 곳에서 변화가 일어나도 다른 곳에 미치는 영향을 최소화 시킬 수 있다. (결합도가 낮다)
2) 객체들 간의 의존도가 높아지면 객체 지향으로 설계하는 의미가 없어지므로 의존도가 최대한 낮게 만드는 것이 중요하다.
3) 결합도를 최대한 줄이고, 응집도를 높여야 고객의 요구사항 변경에 대처를 쉽게 할 수 있다.
나. 응집도, 결합도와 관련있는 캡슐화
1) 외부에서 접근할 필요가 없는 것들은 private으로 접근하지 못하도록 제한을 두는 정보은닉을 통해 응집도를 높이고 결합도를 낮게 한다.
3. 상속
상속: 여러 개체들이 지닌 공통된 특성을 부각시며 하나의 개념이나 법칙으로 성립하는 과정
가. 자식클래스를 외부로부터 은닉하는 캡슐화의 일종이다.
ex) 자동차 클래스 옆에 사람 클래스를 추가했다고 생각해 보자. 자동차의 자식클래스에 해당하는 벤츠, BMW, 아우디 등은 사람 클래스의 관점에서는 구체적인 자동차의 종류가 어떤 것인지는 운전하는데 크게 중요하지 않다. 새로운 자동차들이 추가된다고 해도, 사람 클래스는 영향을 받지 않는 것이 중요하다.
나. 단순히 하나의 클래스 안에서 속성 및 연산들을 캡슐화 하는 것과는 다르게 상속에서는 자식 클래스 자체를 캡슐화한다. 캡슐화가 나무라고 생각하면, 상속은 숲이라고 생각하면 된다.
다. 상속의 단점
1) 상위 클래스(부모 클래스)의 변경이 어려워 진다.
- 부모 클래스에 의존하는 자식 클래스가 많을 때 부모 클래스를 변경한다면 자식 클래스들이 영향을 받게 된다.
2) 불 필요한 클래스가 증가할 수 있다.
4. 다형성
다형성: 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
가. 다형성은 상속과 함께 활용할 때 큰 힘을 발휘한다. 코드를 간결하게 해주고, 유연함을 갖추게 해준다.
나. 부모 클래스의 메소드를 자식 클래스가 오버라이딩해서 자신의 역할에 맞게 활용하는 것이 다형성이다.
- 부모 클래스의 의존하고 있는 자식 클래스는 무관하게 프로그래밍 하는 것이 가능해진다.
'기타' 카테고리의 다른 글
데브옵스(DevOps) (0) | 2020.01.02 |
---|---|
TDD(Test Driven Development) (0) | 2020.01.02 |
애자일 (0) | 2019.12.31 |
TCP vs UDP (0) | 2019.12.11 |
OSI 7 Layer (0) | 2019.12.11 |