728x90
반응형
객체 지향 프로그램
- 객체 지향 프로그램 : 객체의 관점에서 프로그래밍 <-> C 언어 : 절차 지향적인 프로그래밍(프로세스가 함수 단위로 순서대로 진행됨)
- 객체를 기준으로 코드를 나누어 구현함
- 애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍함
- Java => 구성 부분 단위는 클래스이며, 클래스는 설계도 역할이고, 구현체는 인스턴스임
- 클래스 : 객체를 정의하고 만들어 내기 위한 설계도이며, 클래스 안에 객체를 만들어내기 위해 변수와 메서드들이 존재함
- 객체 : 클래스에 선언된 모양 그대로 생성된 실체로 클래스의 인스턴스라고 부름
- 인스턴스 : 클래스를 통해 구현해야 할 객체가 실제로 구현된 구체적인 실체
- 캡슐화(Encapsulation)
- 정의 : 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶음
- 목적 : 정보은닉
- ex) 정보를 가지고 있는 어떤 객체에서 그 정보가 public으로 선언되어 있다면, 누구든 접근해서 타겟 정보를 변경할 수 있기 때문에 => private으로 선언하여 데이터를 보호하고, 접근을 제한해야 함
- 보호된 변수는 getter or setter 등의 메서드를 통해서만 간접적으로 접근이 가능하도록 하는 것이 캡슐화의 목적임
- 캡슐화는 불필요한 정보를 감출 수 있기 때문에 정보은닉 할 수 있다는 특징이 있는 것이지, 정보은닉과 동일한 개념은 아님
- ex) 사용자 입장에서 public으로 정의된 속성만 알면 되며, private으로 정의된 속성은 알 필요가 없다는 의미임
- 추상화(Abstraction)
- 정의 : 목적과 관련이 없는 부분을 제거하여 필요한 부분만 표현함
- 추상클래스 : 추상적으로 끄집어 낸 개념들을 큰 틀에서 클래스로 만듦
- 추상화 : 객체들의 공통된 특징을 파악해 정의해놓은 설계 기법
- 정의 : 목적과 관련이 없는 부분을 제거하여 필요한 부분만 표현함
- 다형성(Polymorphism)
- 정의 : 상속을 통해 기능을 확장하거나 변경함
- 다형성 : 형태가 같은데 다른 기능을 하는 것을 말함
- 같은 동작을 하지만 다른 결과물이 나올 경우, 다형이라고 함 => 코드의 재사용, 코드의 길이가 감소되어 유지보수가 용이함
- 같은 이름의 속성을 유지함에 있어서, 속성을 사용하기 위한 인터페이스 유지 및 메서드 이름 낭비가 없다는 장점이 있음(API가 많아질수록, 복잡성이 증하기 때문에 다형성이 유용함)
- 다형성 : 형태가 같은데 다른 기능을 하는 것을 말함
- Overriding : 부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용함
- Overloading : 같은 이름의 메서드를 사용하지만, 메서드마다 다른 용도로 사용되며, 그 결과물도 다르게 구현할 수 있게 만듦
- 오버로딩이 가능하려면 메서드끼리는 이름이 같지만, 매개변수의 갯수나 데이터 타입이 다르면 오버로딩 적용되며, 메서드 이름이 같아도 문법 에러는 발생하지 않음
- 정의 : 상속을 통해 기능을 확장하거나 변경함
- 상속성(Inheritance)
- 정의 : 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와줌
- 기존 클래스에 기능을 가져와 재사용할 수 있고, 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 줌
- 자바에선 상속은 단일 상속밖에 지원이 안되며, C++에선 다중상속이 지원됨
- 목적 : 코드의 중복을 없애기 위함
- 개발도 복잡하고, 유지보수에서도 많은 비용이 발생함
- 정의 : 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와줌
- 객체 지향적 설계 원칙
- SRP(Single Responsibility Principle) : 단일 책임 원칙
- 클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
- 클래스가 여러 책임을 갖게 되면, 그 클래스는 각 책임마다 변경되는 이유가 발생하기 때문에 => 클래스가 한 개의 이유로만 변경되려면 클래스는 한 개의 책임만 가져야 함
- 클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
- OCP(Open-Closed Principle) : 개방-폐쇄 원칙
- 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- 기능을 변경하거나 확장할 수 있으면서, 그 기능을 사용하는 코드는 수정하지 않음
- 변화하는 부분을 추상화함으로써, 기존 코드를 수정하지 않고, 확장할 수 있게 만들어 줌
- 개방 폐쇄 원칙을 지키는 방법으로는
- 1) 변화하는 부분을 추상화 하는 것
- 2) 상속을 이용하는 것
- 원칙을 지키지 않았을 경우, 문제점
- 1) 다운 캐스팅
- 2) 비슷한 if ~ else 블록이 존재
- 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 특정 메소드가 상위타입을 인자로 사용한다고 할 때, 그 타입의 하위 타입도 문제없이 정상적으로 작동해야 함
- 원칙 위반 문제
- 리스코프 치환 원칙이 지켜지지 않으면 개방 폐쇄 원칙을 위반하게 되므로 기능 확장을 위해 더 많은 부분을 수정해야 함
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
- 클라이언트는 자신이 사용하는 메소드에만 의존해야 한다.
- 인터페이스 분리 원칙은 클라이언트를 기준으로 인터페이스를 분리함으로써, 클라이언트로부터 발생하는 인터페이스의 여파가 다른 클라이언트에 미치는 영향을 최소화하는 것
- 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
- DIP(Dependency Inversion Principle) : 의존 역전 원칙
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.
- SRP(Single Responsibility Principle) : 단일 책임 원칙
728x90
반응형
'Computer Science > Computer Science' 카테고리의 다른 글
프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍 (1) | 2023.11.27 |
---|---|
로드 밸런서(Load Balancer)? (1) | 2023.01.26 |
HTTP vs HTTPS 비교 (0) | 2023.01.25 |
TCP & UDP 정의 (0) | 2023.01.25 |
댓글