프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식 → Top-Down 방식
ex) C언어, Pascal 등
[특징]
[장점]
[단점]
자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행순서와 흐름을 짜는 방식 → Bottom-Up 방식
ex) Java, Python, C++ 등
[특징]
[장점]
[단점]
추상화(abstraction)
구체적으로 정의하는 것이 아닌 필요한 정보만 중심으로 간소화 하는 것
캡슐화(Encapsulation)
객체가 독립적인 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리
상속성(Inheritance)
하나의 클래스가 가진 데이터나 기능을 다른 클래스가 그대로 물려받는 것
→ 기존 코드 재사용하여 확장 가능
다형성(Polymorphism)
하나의 클래스나 메서드가 다양한 방식으로 동작 가능
오버 라이딩(overriding): 상위 클래스의 메서드를 하위 클래스에서 재정의
오버 로딩(overloading): 같은 이름의 메서드를 여러개 정의하고, 매개변수의 유형과 개수를 다르게하여 다양한 유형 호출
정보은닉(Information hiding)
객체 간의 의존성을 낮춰(추상화) 기능의 교체나 변경이 쉽도록(다형성) 하는 동시에 쉽게 변경될 수 있는 내용 또는 비밀을 내부에 감추고 쉽게 변경되지 않을 내용만 외부로 노출(캡슐화)
→ 캡슐화, 추상화, 다형성의 개념들은 정보은닉을 위해 사용되는 개념들임!
단일 책임 원칙(Single Responsibility Principle/SRP)
한 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함
개방-폐쇄 원칙(Open/Closed Principle/OCP)
클래스, 모듈, 함수 등은 확장에 대해 열려 있어야 하고, 변경에 대해서는 닫혀 있어야 함
리스코드 치환 원칙(Liskov Substitution Principle/LSP)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함
인터페이스 분리 원칙(Interface Segregation Principle/ISP)
큰 덩어리의 인터페이스를 구체적이고 작은 단위로 분리하여 클라이언트가 꼭 필요한 메서드만 이용할 수 있게 함
의존관계 역전 원칙(Dependency Inversion Principle/DIP)
상위 모듈은 하위 모듈에 의존해서는 안되며, 추상화는 세부 사항에 의존해서는 안됨