-
OOP ConceptIT Fundamental Concept/OOAD 2020. 2. 29. 23:48
Procedural Programing vs Object Oriented Programming
Procedural Programing
프로시저 호출의 개념을 바탕으로 하고 있는 프로그래밍 패러다임으로 프로그램이 프로시저를 이용해서 위에서 아래로 순서대로 수행되는 개발 방법입니다. 대표적으로 C언어가 있습니다. 이는 컴퓨터 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 실행속도가 빠릅니다.
Object Oriented Programing
객체지향이란 실제 세계를 모델링하여 소프트웨어를 개발하는 방법입니다. 객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어서 생각하게 됩니다. 객체지향의 3대 특성으로는 Encapsulation, Inheritance, Polymorphism이 있으며, 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 사용됩니다.
Encapsulation
연관된 데이터와 함수를 논리적으로 묶어 놓은 것이며, 외부에서는 객체의 실제 데이터의 처리과정을 알 수 없다. 외부에서는 통신을 위해서 객체의 공개된 Method를 이용해야 한다.
- Cohesion 증가 Coupling 감소
- SoC 달성
- 외부의 변화에 영향을 덜 받음
Information Hiding
코드 내부의 data와 method를 숨기고 공개된 Interface를 통해서만 접근이 가능하도록 하는 개념이다. 공개범위는 접근지시자로 지정 합니다.
Encapsulation은 관련된 요소를 묶어 캡슐 내부와 외부를 구별지는 장치이고 Information Hiding은 캡슐 내부요소들에 대한 세부 구현사항을 외부에 숨기는 장치이다. 따라서 캡슐화 했다고 해서 반드시 Hide 되는 것은 아니다.
모듈간 의존도를 낮춰서 Coupling이 낮아지고 Modularity가 좋아진다. 모듈내에 변경해도 외부에 미치는 영향을 최소화 할 수 있다.
Visibility(접근성)
Public, Protected, Private같은 접근 지시자를 이용해 데이터나 메소드에 대한 접근 권한을 제어하는 키워드Inheritance
“is a kind of”, “is-a” 관계를 나타낸다. 부모 객체의 Attribute와 Operation을 자식이 물려 받는 것을 얘기한다.
상속은 객체들 간의 관계를 구축하는 방법 중 하나입니다. 상속을 통해서 부모 클래스의 기능을 자식 클래스가 재사용할 수 있고 기능을 확장할 수 있습니다.
Polymorphism
다양한 형태로 동작하는 성질을 말합니다.
같은 Type의 서로 다른 객체가 동일한 메소드에 대해 서로 다른 기능을 제공하는 객체지향 특징을 뜻합니다. Runtime Polymorphism(Dynamic)으로 Overriding이 있으며, Compile time Polymorphism(Static)으로 Overloading이 있습니다.
Overriding
부모 Class에서 정의한 메서드를 자식 Class에서 변경하는 것.
Overloading
같은 클래스내에서 같은 이름의 메서드를 사용하는 것.
Dynamic Binding
Compile 시에 결정되지 않고, 해당 Class 파일이 실행되는 시점(Runtime)에 결정되는 것으로 OCP를 가능하게 하는 장치입니다.
장점
- 유연성(혹은 적응성). 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 많은 선택의 여지가 있다.
단점
- 안정성. 실행도중에 예상치 못한 타입이 들어와 Type Error를 내는 경우가 생긴다.
Substitutability(대체가능성)
- 특정 타입을 사용해야 하는 곳이 있다면, 이 타입의 서브타입을 대신 쓸 수 있다는 원칙이다.
Abstract Class vs Interface
Abstract Class
추상 클래스를 상속 받아 기능을 이용하고 확장 시키기 위함
- 추상 메소드가 하나 이상 포함되면 반드시 추상 클래스로 선언되어야 한다.
- 반드시 추상 클래스를 상속하는 자식 클래스에서 부모가 가진 추상 메소드를 모두 Overriding해야 한다.
- 추상 클래스에서 추상 메소드가 아닌 일반 메소드를 포함시킬 수 있다.
- 추상 메소드는 몸체가 없고 선언부만 존재한다.
Interface
구현 객체의 같은 동작을 보장하기 위함
- 오로지 추상 메소드와 상수만을 가집니다. 즉 로직을 작성할 수 없습니다.
- 인터페이스 내에 존재하는 메소드는 무조건 public abstract로 선언됩니다.
- 인터페이스 내에 존재하는 변수는 무조건 public static final로 선언됩니다.
- 인터페이스는 다중 상속과 비슷한 기능을 제공합니다.
Generic Class/Template
형식 매개 변수 (타입 제거의 개념). 사용자가 전달하는 “형식”을 매개변수로 사용하여 형식 내부에서 형식 매개 변수로 정의된 (주로 단일 형식 매개 변수에서는 T를 사용합니다.) 형식을 교체하는 것입니다.
'IT Fundamental Concept > OOAD' 카테고리의 다른 글
OO Analysis & Design (0) 2020.03.01 SOLID Principle (0) 2019.12.03