객체지향
- 실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어 상에 표현하기 위해 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링 하려는 프로그래밍 패러다임
- 크게
추상화
캡슐화
상속
다형성
의 네가지 특성을 가짐
추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출하는 것
- 공통의 속성과 행위를 찾아 타입을 정의하는 과정
- 불필요한 정보는 숨기고 중요한 정보만 표현함으로써 프로그램을 간단하게 만드는 것
- 예시
- 휴대폰의 기능들을 구현하고, 동작하게 하는 것은 복잡하지만, 그걸 사용하는 것은 간단하다
캡슐화(Encapsulation)
- 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것
- 낮은 결합도를 유지할 수 있도록 설계하는 것
- 예시
- private 변수 / method
- mood, hungry, energy, meow()
- public methods
- sleep(), play(), feed()
- 고양이에게 밥을 주거나 놀아줄 수는 있지만, 얼마나 배가 고픈지는 직접 변경 할 순 없다
상속
- 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 의미
- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능
다형성
- 하나의 변수명, 함수명이 상황에 따라 다른의미로 해석될 수 있는 것
- 어떠한 요소에 여러 개념을 넣어 놓는 것
- 오버라이딩
- 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것
- 오버로딩
- 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것
객체지향 프로그래밍의 장/단점
- 장점
- 클래스 단위로 모듈화 시켜서 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합
- 클래스 단위로 수정이 가능하기 때문에, 유지보수가 편리
- 클래스를 재사용 하거나, 상속을 통해 확장함으로써 코드 재사용이 용이
- 단점
- 처리속도가 상대적으로 느림
- 객체의 수가 많아짐에 따라 용량이 커질 수 있음
- 설계 시 많은 노력과 시간이 필요할 수 있음
SOLID(객체 지향 설계 원칙)
- 단일 책임 원칙 (SRP, Single Responsibility Principle)
- 하나의 클래스는 단 하나의 책임만 가져야 한다
- 단일 책임 원칙을 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다
- 개방-폐쇄 원칙(OCP, Open/Closed Principle)
- SW 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다
- 기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않는다
- 리스코프 치환 원칙(LSP, Liskov Subsituation Principle)
- 프로그램 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다
- 상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위타입을 사용하는 프로그램은 정상적으로 동작해야 한다
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 범용 인터페이스 하나보다 클라이언트 여러개의 인터페이스로 구성하는 것이 좋다
- 인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다
- 클라이언트가 필요로하는 인터페이스로 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야 한다
- 의존관계 역전 원칙(DIP, Dependecy Inversion Principle)
- 추상화에 의존해야지 구체화에 의존하면 안된다
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야 한다
절차지향
- 프로시저(루틴, 하위 프로그램, 서브루틴, 메서드, 함수 등)를 이용하여 작성하는 프로그래밍 방식
- 프로시저 콜의 개념을 바탕으로 한 프로그래밍 패러다임
- 어떤 기능을 어떤 순서로 처리할 것인가?
특징
- 하나의 큰 기능을 처리하기 위해 작은 단위의 기능들로 나누어 처리하는 Top-down 접근 방식으로 처리 된다
- 데이터와 함수를 별개로 취급한다
- 모든 함수는 데이터 공유가 가능하다
- 정해진 순서대로 입력해야 하므로 순서가 바뀌면 결과가 달라질 수 있다
- 프로그램이 커질수록 구조가 복잡해져 유지보수가 어렵다
Refs
'cs' 카테고리의 다른 글
전위, 후위 연산자 (1) | 2025.08.04 |
---|---|
Singleton Pattern (0) | 2024.06.02 |