본문 바로가기

JAVA/OOP

(14)
의존역전원칙 의존역전원칙(Dependency inversion principle)- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다. 저수준 모듈이 고수준 모듈에서 정의한 추상타입에 의존해야 한다. 고수준모듈?-> 어떤 의미있는 단일 기능을 제공하는 모듈저수준모듈?-> 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현 예) 암호화고수준모듈- 바이트 데이터를 읽어와- 암호화하고- 결과 바이트 데이터를 쓴다. 저수준모듈-파일에서 바이트 데이터를 읽어온다.-AES 알고리즘으로 암호화 한다.-파일에서 바이트 데이터를 쓴다. 바이트 데이터를 암호화한다는 것이 이 프로그램의 의미 있는 단일 기능으로서 고수준 모듈에 해당한다.고수준 모듈은 데이터읽기, 암호화, 데이터 쓰기라는 하위 기능으로 구성되는데, 저수..
단일책임원칙 단일책임원칙(Single responsibility principle)객체지향의 기본은 책임을 객체에게 할당하는데 있다.객체를 객체로 존재하게 하는 이유가 책임인데, 단일책임원칙은 이 책임과 관려된 원칙이다. - 클래스는 단 한개의 책임을 가져야한다. 클래스가 여러 책임을 갖게되면 그 클래스는 각 책임마다 변경되는 이유가 발생하기 때문이다.클래스가 한 개의 이유로만 변경되로면 클래스는 한 개의 책임만 가져야한다.다른말로 클래스를 변경하는 이유는 단 한 개여야 한다. 객체에게 책임을 할당하는 것이 객체 설계의 기본인 만큼, 단일 책임 원칙은 가장 중요한 원칙 중의 하나이다.단일책임원칙이 잘 지켜지지 않으면 다른 원칙들도 그 효과가 반감되기 때문에 최대한 지켜야하는 원칙이다.하지만 가장 어려운 원칙이기도 하..
객체지향 객체지향은 데이터 및 데이터와 관련된 프로시저를 객체라고 불리는 단위로 묶는다.객체는 프로시저를 실행하는데 필요한 만큼의 데이터를 가지며, 객체들이 모여 프로그램을 구성한다. 각 객체는 자신만의 데이터와 프로시저를 갖는다. 객체는 자신만의 기능을 제공하며, 각 객체들은 서로 연결되어 다른 객체가 제공하는 기능을 사용할 수 있게 된다.객체는 다른 객체에 기능을 제공하기위해 프로시저를 사용하는데, 이 때 프로시저는 자신이 속한 객체의 데이터에만 접근할 수 있으며, 다른 객체에 속한 데이터는 접근할 수 없다.모든 프로시저가 데이터를 공유하는 절차 지향과 달리 객체 지향은 객체 별로 데이터와 프로시저를 알맞게 정의해야 하고, 프로그램의 규모가 작을 때에는 절차지향방식보다 복잡한 구조를 갖게된다. 하지만, 객체지..
절차지향 절차지향소프트웨어를 구현하다는 것은 최종적으로 소프트웨어를 구성하는 데이터와 데이터를 조작하는 코드를 작성하는 것이다.데이터를 조작하는 코드를 별도로 분리해서 함수나 프로시저와 같은 형태로 만들고, 각 프로시저들이 데이터를 조작하는 방식으로 코드를 작성할 수 있다.프로시저는 다른 프로시저를 사용할 수도 있고, 각각의 프로시저가 같은데이터를 사용할수도 있다.프로시저(procedure)로 프로그램을 구성하는 기법을 절차지향(Procedural Oriented)프로그래밍이라고 부른다. 각 프로시저는 데이터를 사용해서 기능을 구현하며, 필요에 따라 다른 프로시저를 사용하기도한다.또한 여러 프로시저가 동일한 데이터를 공유한다. 예) 시험성적관리 프로그램 평균계산 프로시저는 각 과목의 점수가 보관된 데이터를 읽어서..
컴포넌트 컴포넌트컴포넌트의 정의- 컴포넌트에 대한 정의는 다양하다. 컴포넌트가 재사용 단위라는 의미로 많이 사용되기 때문이다.재사용이라는 측면을 넓은 의미로 보면 소프트웨어 개발에 있어서 재사용되는 모든 단위들은 컴포넌트라고 보는 것이다.이런 의미에서의 컴포넌트는 재사용되는 문서, 재사용 모델, 재사용 테이블, 재사용 코드, 재사용 라이브러리 등 다양하다. 그러나 소프트웨어 개발에 있어서 하드웨어 컴포넌트(예: RAM, HDD, CPU 등)처럼 실제 소프트웨어 시스템 작동에 필요한 런타임 모둘(Runtime Module)의 성격을 가진 재사용 단위로서의 컴포넌트를 다룬다.이러한 좁은 의미에서의 컴포넌트에 대한 정의도 다양하게 표현되고 있다.표현 방법의 차이일 뿐이지 개념에 대한 내용은 동일하다. "컴포넌트는 잘 ..
다형성 다형성 다형성 정의- 다형성(Polymorphism)이란 "여러 개의 형태를 가진다"의 의미의 그리스어에서 유래된 말로서 특정한 심벌이나 연산자에 대해 상황이 다르면 그 의미도 다르게 부여할 수 있는 특성을 말한다. 연산자의 경우 예로 플러스 기호(+) 일반적으로 두수를 더하라는 의미로 사용되지만, 불린검색에서는 논리 연산인 and를 의미한다. 객체지향언에서는 연산자 오버로딩이라는 용어로 다형성을 표현한다. 객체지향에서는 이러한 다형성을 오버로딩(overloading)과 오버라이딩(overriding) 두가지 형태를 모두 포함하고 있다.오버로딩은 다시 연산자 오버로딩과 함수 오버로딩으로 분류하고 있다. 연산자 오버로딩이란 특정 연산자가 상황에 따라 연산자의 의미나 용도가 달리 쓰이는 현상을 말한다.예) ..
인터페이스 인터페이스의 개념 인터페이스의 정의인터페이스 - 사물간 또는 사물간의 인간 사이의 의사소통이 가능하도록 일시적 혹은 영구적 접근을 목적으로 만들어진 물리적, 가상적 매체를 의미 예) TV 리모콘(시청자와 TV 수상기와의 상호작용을 위한 인터페이스) 컴퓨터 하드웨어 분야에서는 인터페이스르 물리적 매체로 나타내지만, 소프트웨어서는 특정 기능을 위한 관련된 함수들의 집합이라고 표현 객체지향에서 다루는 인터페이스 개념은 소프트웨어에서 다루는 인터페이스 개념을 의미.인터페이스는 특정 기능 또는 특정 서비스 수행에 필요한 함수들을 선언만 하고 있기 때문에 이 선언된 함수들에 대한 구현은 클래스나 컴포넌트를 통해서 구현하게 된다.따라서 인터페이스에대한 명세가 잘 정의되면 구현은 인터페이스와 분리되어서 다양하게 구현할..
추상클래스 추상클래스 추상클래스 정의- 추상클래스는 서로 다른 유형의 클래스들 간에 공통된 행위를 추출하여 정의한 가상의 클래스이다.공통된 행위들에 대해 일반화시켜 만들었기 때문에 추상 클래스도 상속 구조를 취하게 된다.그리고 일반화 시킨 클래스가 추상 클래스이기 때문에 추상 클래스는 상속 구조에서 슈퍼 클래스에 해당한다.이에 반해 추상클래스의 하위 클래스들을 구체화 클래스(Concrete Class)라고 한다. 추상 클래스는 원래 클래스로 존재한 것이 아니라 여러 클래스들 간에 공통 행위들이 있어서 중복성을 배제하기 위해 일반화 시킨 클래스이기 때문에 실제 객체로 생성할 수 없다.따라서 상속구조에서 객체를 생성할 수 잇는 슈퍼 클래스와 구별하기 위해 추상클래스를 별도로 구분하여 정의하고 있다.예) Payment(..