목차
- 객체지향 프로그래밍(Object oriented programming)이 나온 배경
- 객체지향 프로그래밍(Object oriented programming)이란?
- 객체(Object)란?
- 객체지향 프로그래밍(Object oriented programming)의 특징
- 객체지향 프로그래밍(Object oriented programming)의 장단점
- 객체지향 설계 5원칙(SOLID)
- 절차지향 프로그래밍
객체지향 프로그래밍(Object oriented programming)이 나온 배경
하드웨어의 빠른 발전 속도에 비해 소프트웨어의 개발 시간이 따라가지 못하게 되었고,
하드웨어의 리소스를 좀 더 사용하더라도 모듈화와 캡슐화를 통해 개념적으로 접근하여,
소프트웨어의 개발 시간을 단축시기키 위해 탄생
객체지향 프로그래밍(Object oriented programming)이란?
- 프로그램 구현에 필요한 객체를 파악하고,
객체들의 역할을 정의하여 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 기법
- 레고에 빗대어 표현하자면, 객체는 각각의 레고 조각이 되고,
레고의 조각을 조립해서 무언가를 만드는 것을 객체지향 프로그래밍이라고 할 수 있음
객체(Object)란?
- 프로그램에서 사용되는 데이터 또는 식별자(identifier)(변수나 클래스 함수등의 이름으로 쓰일 수 있는 문자열)에 의해 참조되는 공간을 의미
- 레고에 빗대어 표현하자면, 각각의 레고 조각이라고 할 수있음
객체지향 프로그래밍(Object oriented programming)의 특징
추상화(abstraction)
- 객체에서 공통된 기능 또는 속성을 찾아 추출하고 타입을 정의하는 과정
캡슐화(encapsulation)
- 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호
- 캡슐화를 통해 데이터 보호와 데이터 은닉을 꾀함(접근제어자를 활용)
> 데이터 보호 : 외부로부터 클래스에 정의된 속성과 기능들을 보호
> 데이터 은닉 : 내부의 동작을 감추고 외부에는 필요한 부분만 노출
상속(inheritance)
- 하위클래스가 상위클래스의 속성과 기능을 물려받는 것
- 재사용성과 범용성이 증가
- 상위 클래스의 변경이 어려워지고, 불필요한 클래스가 증가 할 수 있음
다형성(polymorphism)
- 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가지는 성질
- PHP의 오버라이딩 기능이 대표적
객체지향 프로그래밍(Object oriented programming)의 장단점
장점
- 모듈화를 통해 개발하기 때문에 업무분담이 편하고, 대규모 소프트웨어 개발에 적합
- 클래스단위로 수정이 가능하기에 유지 보수가 용이
- 클래스의 재사용 및 상속을 통해 확장하므로 코드 재사용이 용이
단점
- 처리속도가 상대적으로 느려짐
- 객체의 수가 증가함에 따라 용량이 커질 수 있음
- 설계에 많은 시간과 노력이 필요 함
- 소규모 소프트웨어 개발의 경우 오히려 복잡해 질 수 있음
객체지향 설계 5원칙(SOLID)
1. 단일 책임 원칙(Single Responsibility Principle)
- 하나의 클래스는 단 하나의 책임만 가져야 한다.
2. 개방 폐쇄 원칙(Open/Closed Principle)
- 소프트웨어 요소는 확장에는 열려있으나, 변경에는 닫혀 있어야 한다.
3. 리스코프 치환 원칙(Liskov Substitution Principle)
- 상위 타입의 객체를 하위 타입의 객체로 치환해도,
상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
4. 인터페이스 분리 원칙(Interface Segregation Principle)
- 클라이언트의 목적과 용도에 적합한 인터페이스 만을 제공해야 한다.
5. 의존관계 역전 원칙(Dependency Inversion Principle)
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고, 저수준 모듈은 고수준 모듈에 의존해야 한다.
> 고수준 모듈: 비즈니스와 관련된 추상화된 모듈
> 저수준 모듈: HTTP, 데이터베이스, 캐시 등과 관련된 구현 모듈
- 비즈니스와 관련된 부분이 세부 사항에는 의존하지 않는 설계 원칙
절차지향 프로그래밍
- 프로그램을 기능중심으로 바라보는 방식으로 "무엇을 어떤 절차로 할 것인가?"가 핵심
- 어떤 기능을 어떤 순서로 처리하는가에 초점
- 장점 : 컴퓨터의 처리구조와 유사해 실행속도가 빠름
- 단점 : 실행 순서가 정해져 있어, 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움
Github
'PHP > PHP_ex' 카테고리의 다른 글
Session, Cookie, Token (0) | 2023.05.11 |
---|---|
try-catch (0) | 2023.04.04 |
fnc DB connect (0) | 2023.04.03 |
PDO (0) | 2023.04.03 |
prepared_statement (0) | 2023.04.03 |