ITGenerations
정보처리기사 실기 - 객체지향 본문
1. 객체 지향 기법의 개요
객체지향 기법은 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있도록 하는 기법이다.
객체지향 기법 사용이유? 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용중이다.
장점
1. 소프트웨어의 재사용 및 확장을 용이하게 함으로써
2. 고품질의 소프트웨어를 빠르게 개발할 수 있으며
3. 유지보수가 쉽다.
복잡한 구조를 단계적, 계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다.
현실 세계를 모형화 하여 사용자와 개발자가 쉽게 이해할 수 있다.
객체 지향 기법의 구성 요소에는 객체(Object), 클래스(Class), 메시지(Message)가 있다.
객체(Object) 객체는 데이터와 데이터를 처리하는 함수를 묶어 놓은(캡슐화한) 하나의 소프트웨어 모듈이다.
캡슐화란?
캡슐화(영어: encapsulation)는 객체 지향 프로그래밍에서 다음 2가지 측면이 있다:[1][2]
속성인 데이터와 메서드의 결합은 C++의 경우 멤버함수를 호출할 때 객체의 저장공간을 멤버함수에 넘겨 데이터 처리를 하도록 하는 방법을 사용한다.
외부에 감추는 방법으로는 언어적 측면에서 접근지정자를 두어 은닉의 정도를 기술하여 구현한다. 은닉의 정도를 접근지정자로 기술하고 해당 영역에 들어가는 속성이나 메서드를 제한하면 된다. 접근지정자에 의해 제한된 멤버들은 컴파일러에 의해 판단된다. 언어적 측면에서 접근지정자에 의해 정의된 해당 멤버변수나 멤버함수는 코드 중에 접근방식을 위반한 코드를 작성하면 컴파일 오류로 처리하고 실행코드 생성을 제한한다.
출처: 위키백과
데이터 |
*객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타낸다. *속성(Attribute), 상태, 변수, 상수, 자료구조라고도 한다. |
함수 |
*객체가 수행하는 기능으로, 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘이다. *객체의 상태를 참조하거나 변경하는 수단이 되며, 메소드(Method, 행위), 서비스(Service), 동작(Operation), 연산이라고도 한다. *기존의 구조적 기법에서의 함수, 프로시저에 해당하는 기능이다. |
객체는 상태와 행위를 가지고 있다.
객체는 다른 객체들과 구별될 수 있는 이름을 가지고 있으며, 일정한 기억장소를 가지고 있다.
객체의 메소드는 다른 객체로부터 메시지를 받았을 때 수행하게 된다.
구조적 기법
프로그램 = 데이터 + 함수
객체지향 기법
객체 = 데이터 + 함수
프로그램 = 객체 + 객체
클래스(Class)
*클래스는 공통된 속성과 연산(행위)을 갖는 객체의 집합으로 객체의 일반적인 타입이다.
*클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀이다.
*클래스에 속한 각각의 객체를 인스턴스(Instance)라 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화(Instantiation)라고 한다.
*동일 클래스에 속한 각각의 객체(인스턴스)들은 공통된 속성과 행위를 가지고 있으면서, 그 속성에 대한 정보가 서로 달라서 동일 기능을 하는 여러가지 객체를 나타내게 된다.
*최상위 클래스는 상위 클래스를 갖지 않는 유일한 클래스를 의미한다.
*슈퍼클래스(Superclass)는 특정 클래스의 상위(부모) 클래스이고, 서브클래스(Subclass)는 특정 클래스의 하위(자식)클래스를 의미한다.
-> 최상위 클래스가 슈퍼클래스가 될수는 있지만, 슈퍼클래스는 최상위 클래스가 될 수 없을 수도 있다.
따라서, 이러한 차이점들을 주의해야 될 것 같다.
메세지(Message)
*메세지는 객체들(Objects) 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구 사항이다.
*메시지의 구성요소
1. 메세지를 받는 객체(수신자)의 이름
2. 객체가 수행할 메소드 이름
3. 메소드를 수행할 때 필요한 인자(속성값)
*인자는 옵션(Option), 즉 필요할 때만 사용한다.
*메세지를 받은 수신 객체는 메소드(동작, 연산)를 수행하여 결과를 반환하게 된다.
ps. 자바에서는 메소드를 void 혹은 타입형으로 반환 하는데, void는 return void라고 해서 생략되어 있을 뿐이지,
반환 하기는 한다!!! 타입형은 각 타입형으로 반환하는건 잘 알고 있으니 설명은 따로 안하겠지만, 예를 들면
public int Method(){
return int type Variable;
}
이런식으로 반환을 한다. int type Variable은 어떤 타입의 변수가 들어가는거지, 저렇게 쓰지는 않는점을 주의.
문제1. 다음에서 공통적으로 설명하는 소프트웨어 개발 기법을 쓰시오.
* 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있는 기법이다. *구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용되고 있다. *현실 세계를 모형화하여 사용자와 개발자가 쉽게 이해할 수 있다. *소프트웨어의 유지봅수성이 향상되며, 재사용 비율이 높아진다. |
답: 객체지향기법
문제2. 다음 괄호 ( )의 내용에 공통적으로 들어갈 객체지향 기법의 구성요소를 쓰시오.
*( )는 객체지향 개념 중 하나로, 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터를 추상화를 의미한다. *( )는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀이다. *모든 객체들은 더 큰 ( )의 멤버이고, 그 ( )에 대하여 이미 정의된 개별 자료 구조와 연산이 상속된다. 그 때문에 개별 객체는 ( )의 인스턴스가 된다. |
답: 클래스(Class)
문제3. 객체지향 기법의 구성 요소 중 메세지(Message)의 개념을 간략히 서술하시오.
답: 메세지는 객체들 간에 상호작용하는데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항이다.
문제4. 객체(Object)는 데이터와 데이터를 처리하는 메소드(함수)를 묶어놓은 하나의 소프트웨어 모듈이다. 데이터와 메소드에 대하여 간략히 서술하시오.
답:
*데이터 :
1. 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타낸다.
2. 속성, 상태, 변수, 상수, 자료 구조라고도 한다.
*메소드 :
1. 객체가 수행하는 기능으로, 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘
2. 객체의 상태를 참조하거나 변경하는 수단이 되며, 메소드, 서비스, 동작, 연산이라고도 한다.
3. 기존의 구조적 기법에서는 함수, 프로시저에 해당하는 기능이다.
객체지향 기법의 기본 원칙에는 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등이 있으며, 이 중 구조적 기법과 차별되는 개념은
캡슐화, 상속성 다형성이다.
캡슐화(Encapsulation)
*캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미한다.
*캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적다.
*캡슐화된 객체들은 재사용이 용이하다.
*객체들 간에 메세지를 주고받을 때 각 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 간단해지고, 객체 간의 결합도가 낮아진다.
ps. 오류의 파급효과가 적은 이유는, 캡슐화된 객체는 외부에서 접근이 힘들고 설령 접근이 가능하더라도 변경이 불가능하거나 힘들게 만들어놓았기 때문이고 만약의 만약의 경우에 외부에서 변경을 하더라도, 캡슐화된 정보를 수정하면 오류를 고칠 수 있다. 그렇기 때문에 파급의 효과가 적다고 할 수 있다. 아래의 정보은닉과도 연관이 있으니 참고한다.
정보은닉(Information Hidng)
*캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
*각 객체의 수정이 다른 객체에게 주는 영향을 최소화하는 기술이다.
*외부 객체가 특정 객체의 데이터와 함수를 직접 접근하여 사용하거나 변경하지 못하므로 유지보수와 소프트웨어 확장 시 오류를 최소화할 수 있다.
추상화(Abstracton)
*추상화는 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략하는 것, 즉 모델화 하는것이다.
*인간이 복잡한 문제를 다룰 때 가장 기본적으로 사용하는 방법으로, 완전한 시스템을 구축하기 전에 그 시스템과 유사한 모델을 만들어서 여러 가지 요인들을 테스트 할 수 있다.
*추상화는 최소의 비용으로 실제 상황에 대처할 수 있고, 시스템의 구조 및 구성을 가시적으로 볼 수 있다.
ps. 추상화라는 단어가 조금 어감이 익숙하지 않고 와닿지 않지만, 무슨 개념인지 정확하게 이해해야된다.
상속성(Inheritance) 상속성은 이미 정의된 상위클래스(부모클래스)의 모든 속성과 하위클래스가 물려받는것이다.
*상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성처럼 사용할 수 있다.
ps. 자신의 속성으로 이용한다는 것은 뭔가 뉘앙스가 이상해보이고, 자신의 것은 아니고 부모의 것이기때문에 자신의 것인것 처럼 사용한다는게 더 어감이 맞지 않나 싶다.
*하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다.
*상위 클래스의 속성과 연산을 하위 클래스가 공유할 수 있기 때문에 객체와 클래스의 재사용, 즉 소프트웨어 재사용(Reuse)을 증대시키는 중요한 개념이 된다.
*다중 상속성(Multiple Inheritance) : 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것이다.
ps. 부모클래스는 하나의 자식클래스에게만 상속을 해줄 수 있고, 자식 클래스는 여러 부모로부터 상속을 받을 수 있다. 이를 다중상속성이라고 한다. 문제점이 있다면, 부모클래스가 여러 개 이기 때문에 클래스 계층이 어려워, 상속 순서 추적이 어렵고, 상위 클래스가 변경이 되면, 하위클래스에도 영향이 미치기 때문에 오류가 발생할 수도 있다.
다형성(Polymorphism)
다형성은 메세지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메세지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미한다.
*객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.
*응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행할 수 있도록 하는 것이다.
ps.오버로딩, 오버라이딩 개념을 알면 다형성이 무엇인지 이해하기 좀 더 쉬울 것 이다.
문제1. 다음이 설명하는 객체지향 기법의 기본원칙은 무엇인지 쓰시오.
*정보 은닉(Informaiton Hidng)이라고도 불린다. *객체의 상세한 내용을 객체 외부에 감추고 메세지를 통하여 다른 객체와 상호작용한다. *구현부가 변경되더라도 변경의 영향을 최소화 할 수 있다. |
답: 캡슐화
ps. 정답이 정보은닉이 아닌 이유는, 정보은닉이 캡슐화 개념의 일부에 속하고 문제 내용에 이미 정보은닉이라고 설명되어 있기 때문에 정보은닉이 아니다라고 생각하면 될 것 같다.
문제2. 객체지향 기법의 기본 원칙 중 하나인 정보 은닉(Informaton Hiding)의 개념을 간략히 서술하시오.
답: 다른 객체로부터 자신의 정보를 숨기고, 자신의 연산망을 통해 접근을 허용한다.
문제3. 다음 내용이 설명하는 객체지향 기법의 기본 원칙을 쓰시오.
객체의 성질을 분해하여 공통된 성질을 추출한 후 슈퍼 클래스를 선정하는 것이다. 즉 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화, 모델화 하는것이다. 예를 들면, 자동차와 말이란 클래스에서 "타는 것"이란 클래스를 만드는 것이다. |
답: 추상화
문제4. 다음 괄호 ( )의 내용에 공통적으로 들어갈 객체지향 기법의 기본 원칙을 쓰시오.
*( )은 메세지에 의해 객체가 연산을 수행하게 될 때 하나의 메세지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력이다. *ASCII File을 Print하는 Method를 갖고 있는 Object, Binary File을 Print하는 Method를 갖고 있는 Object, Picture File을 Print하는 Method를 갖고 있는 Objects를 모두 "Print" Method를 갖고 있으므로, "Print"란 메세지를 바등면 수행하게 된다. 그러나 각각의 Method에서 Print를 수행하는 방법은 모두 다를 것이다. 객체 지향 기법에서 이와 같이 서로 다른 Class들이 같은 의미의 응답을 하는 특성을 ( ) 이라고 한다. |
답: 다형성
ps. 상속성이 아닌 이유는, 글 내용어디에도 상속받는다는 이야기가 없다.
문제5. 객체지향 기법의 기본 원칙 중 하나인 상속성(Inheritance)의 개념을 간략히 서술하시오
답: 이미 정의된 상위 클래스(부모클래스)의 모든 속성과 연산을 하위클래스(자식클래스)가 상속을 받는것이다.
자식 클래스는 부모 클래스의 속성과 연산을 따로 선언하지 않고도, 자신의 것인마냥 사용할 수 있는것이다.
객체지향 기법의 생명 주기
*객체지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 사용되는 객체, 클래스, 메소드, 속성 등이 동일한 개념으로 사용된다는 것이다.
* 개발 전 과정에 걸쳐 동일한 방법론과 표현 기법이 적용된다는 장점을 갖고 있다.
*개발 과정 사이에서 같은 용어와 개념을 사용하여 분석, 설계, 구현단계 사이의 전환이 쉬우므로 각 과정이 명확하게 순차적으로 이루어지지 않는다.
*객체지향 기법의 생명 주기는 1)계획 및 분석, 2)설계, 3)구현, 4)테스트 및 검증 과정으로 이루어진다.
1)계획 및 분석
2)설계
3)구현
4)테스트 및 검증 과정
객체지향
분석 객체지향 분석(OOA: Object Oriented Analysis)은 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들간의 관계 등을 정의하여 모델링하는 작업이다.
ps. 단어와 개념 정확히 알아둬야 된다. 시험에서 영어문제로 나왔었다.
*소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석한다.
*분석가에게 주요한 모델링 구성 요소인 클래스, 객체, 속성, 연산들을 표현해서 문제를 모형화 할 수 있게 해준다.
*객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체지향 분석의 주요한 목적이 된다.
*객체지향 분석의 방법론에는 Rumbaugh(럼바우) 방법, Booch(부치) 방법, Jacobson 방법, Coad와 Yourdon 방법, Wirfs-Brock 방법등이 있다.
1. Rumbaugh(럼바우) 방법
2. Booch(부치) 방법
3. Jacobson 방법
4. Coad와 Yourdon 방법
5. Wirfs-Brock 방법
ps. 위 방법은 실무에서도 유용하게 쓰이는 개념이므로 정확히 알 고 있으면, 실무역량에도 도움이 된다고 한다.
객체지향 설계
객체지향 설계(OOD: Object Oriented Design)는 객체지향 분석(OOA)을 사용해서 생성한 여러 가지 분석 모델을 설계 모델로 변환하는 작업으로, 시스템 설계와 객체 설계를 수행한다.
*최근 소프트웨어 제품의 전형적인 타입인 사용자 중심, 대화식 프로그램의 개발에 적합하다.
*객체지향 설계에서 가장 중요한 문제는 시스템을 구성하는 객체와 속성, 연산을 인식하는 것이다.
*객체지향 설계의 설계 개념은 추상화, 정보은닉, 기능 독립성, 모듈화, 상속성을 바탕으로 하며 이 중 가장 중요한 개념은 모듈화이다.
*객체지향 설계를 위해 럼바우의 객체지향 설계, 부치(Booch)의 객체지향 설게, 윌리엄 로렌스(William Lorensen)의 객체지향 설계 방법등이 제안되었으며, 이 중 일반적으로 럼바우의 객체지향 설계가 가장 많이 사용된다.
*일반적으로 객체지향 설계 단계의 순서는 '문제정의 -> 요구 명세화 -> 객체 연산자 정의 -> 객체 인터페이스 결정 -> 객체 구현' 순으로 진행된다.
객체지향 구현
*구현은 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계이다.
*객체지향 프로그래밍을 이용하면 용이하게 구현할 수 있다.
*객체는 순차적으로(Sequentially) 또는 동시적으로(Concurrently) 구현될 수 있다.
객체지향 프로그래밍(OOP: Object Oriented Programming)
ps. 영어단어 및 개념은 정확히 알아야된다. 시험에 나왔었다.
객체지향 프로그래밍은 새로운 개념의 모듈 단위, 즉 객체라는 단위의 중심으로 하여 프로그램을 개발하는 기법이다.
*객체라는 단위를 이용하여 현실 세계에 가까운 방식으로 프로그래밍한다.
*현실 세계에 가까운 방식이므로 이해하기 쉽고 조작하기 쉬운 프로그램을 개발할 수있다.
*유지보수가 쉽고 재사용 가능한 프로그램을 만들 수 있다.
*이미 개발된 프로그램을 이용해 확장된 프로그램을 개발할 수 있다.
*객체지향 프로그래밍 언어는 다음과 같이 분류 가능하다.
객체 기반 언어 |
Ada, Actor와 같이 객체의 개념만을 지원하는 언어 |
클래스 기반 언어 |
Clu와 같이 객체와 클래스 개념을 지원하는 언어 |
객체 지향성 언어 |
*객체, 클래스, 상속의 개념을 모두 지원하는 가장 좋은 언어 *초기에 발표된 Simula로부터 Smalltalk, C++, Objective C, Java등이 있음 |
객체지향 테스트
클래스 테스트 : 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화된 클래스나 객체를 검사하는 것이다.
통합 테스트 : 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사로, 스레드 기반 테스트와 사용 기반 테스트로 분류할 수 있다.
확인 테스트 : 사용자 요구사항에 대한 만족 여부를 검사한다.
시스템 테스트 : 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는지 검사한다.
ps. 통합테스트는 뭔 소린지 모르겠다...
정확히 어떤 개념인지 아시는분 댓글로 알려주세요.
스레드 기반(Thread-Based) 테스트 |
시스템에 대한 하나의 입력이나 이벤트에 응답하는 데 요구되는 클래스들을 통합하는 것으로, 각각의 스레드가 통합되고 개별적으로 테스트된다. |
사용 기반(Use-Based) 테스트 |
독립 클래스를 테스트한 후 독립 클래스를 사용하는 다음 계층의 종속 클래스를 테스트 한다. |
문제1. 다음 내용은 객체지향 기법의 생명 주기 단계 중 하나이다. 어느 단계를 말하는지 쓰시오.
객체 지향 설계 단계에서 생성된 설계 모델과 명세서를 근거로 하여 코딩하는 단계로, 객체지향 프로그래밍을 이용하면 용이하게 구현할 수 있으며, 객체는 순차적으로(Sequentially) 또는 동시적으로(Concurrently) 구현 할 수 있다. |
답: 객체지향 구현
ps. 빨간 부분이 정답의 힌트다.
문제2. 다음 괄호(1~4)안에 들어갈 가장 적합한 용어를 쓰시오.
*객체지향 기법을 사용하는 소프트웨어 개발 과정의 가장 큰 특징은 각 과정에서 사용되는 객체, 클래스, 메소드, 속성 등이 동일한 개념으로 사용된다는 것이다. *객체지향 기법의 생명주기는 ( 1 ), ( 2 ), ( 3 ), ( 4 )과정으로 이루어진다. |
답:
1. 계획 및 분석
2. 설계
3. 구현
4. 테스트 및 검증
문제3. 객체지향 테스트 중 클래스 테스트, 통합 테스트, 확인 테스트, 시스템 테스트의 개념에 대해 간략히 서술하시오.
답:
클래스 테스트 : 구조적 기법에서의 단위 테스트와 같은 개념으로 가장 작은 단위, 즉 캡슐화된 클래스나 객체를 검사하는 것이다.
통합 테스트 : 객체를 몇 개 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사로, 스레드 기반 테스트와 사용 기반 테스트로 분류할 수 있다.
확인 테스트 : 사용자 요구사항에 대한 만족 여부를 검사한다.
시스템 테스트 : 모든 요소들이 적합하게 통합되고 올바른 기능을 수행하는지 검사한다.
문제4. 다음 설명에 적합한 용어를 쓰시오.
*사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체)이와 연관된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업이다. *소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석해 내는 기법이다. *객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 주요한 목적이다. |
답: 객체지향 분석
문제5. 다음 <보기>에 제시된 객체지향 설계 단계를 순서대로 나열하시오.
<보기>
객체구현, 객체인터페이스 결정, 문제 정의, 요구 명세화, 객체 연산자 정의 |
답: 문제정의 -> 요구 명세화 -> 객체 연산자 정의 -> 객체 인터페이스 결정 -> 객체 구현
아키텍처 스타일
기존의 시스템이나 애플리케이션을 개발자가 아닌 다른 사람이 유지보수를 해야 하는 경우 서로 설계 방식이 달라 코드를 분석하는데 많은 어려움이 따른다. 이를 해결하기 위해 많은 사람들 또는 신뢰 있는 기관에서 검증된 보편적인 설계 방법의 양식들을 사용하는데, 이것을 아키텍처 스타일이라고 한다. 아키텍처 스타일에 있는 여러 설게 방식들을 아키텍처 모델이라고 부르며, 애플리케이션 개발 모델이라고도 부른다.
ps. 실제 개발에서는 이래라 저래라 갑질과... 개판 1분전 코드를 볼 때가 많다...고 한다.
이론은 이론 현실은 현실...
ps. 깃허브에 있는 명성있는 사람들의 소스를 분석하는게 더 나을거같다... 그리고 다양한 사람들의 분석을 해보는것은 정말 도움된다.
꼭하자!!!
IEEE 1471
ANSI/IEEE 14771 -2000의 약어로, 소프트웨어 집약적인 시스템에서 아키텍처가 표현해야 하는 요소와 내용들, 이들 간의 관계를 규정하고 있는 국제 표준이다.
특징
*표준화 : 아키텍처 관련 용어와 개념들을 통일함
*중립성 : 모델링 언어와 방법론을 제시하지 않고, 독립적인 메타 모델을 제공함.
*유연성 : 표현을 위한 요소들과 관계의 일반화로 규모에 상관없이 시스템 구축에 적용 가능함.
*의사소통 : 이해당사자 간의 의사소통을 지원하고, 다양한 관점에서 표현함.
구성요소
*Architectual Descripiton(AD) : 시스템 구축시 아키텍처가 기록되는 방법
*Stakeholder : 소프트웨어 시스템 개발에 관련된 모든 이에 당사자를 의미함(ex, 고객, 개발자, 관리자, 마케터등)
*Concerns : 시스템의 성능, 유지보수, 보안, 분배 등과 같은 Stakeholder들의 의견과 목표
*View : Statkeholder들이 가지는 관점으로 전체 시스템을 표현하거나 묘사하는 방법
*Viewpoint : View를 구성하기 위한 규칙을 정의하는 패턴으로, AD는 하나 이상의 View Point를 선택하여 사용함.
써본적이 없으니 와닿지가 않네...
저장소 구조(Repository Architectur)
중앙자료구조(Centeral Data Structure)와 독립된 컴포넌트)Component)로 구성된 아키텍처다. 컴포넌트 간의 통신은 이뤄지지 않는다.
장점
*대량의 데이터를 저장하는데 효과적이다.
*컴포넌트 추가/삭제가 편리하다.
*중앙 집중화를 통해 데이터 관리가 용이하고, 보안적인 측면이 뛰어나다.
단점
*저장소에 오류가 발생하면 시스템 전체에 문제가 발생한다.
*데이터의 분산이 어렵다.
MVC구조(Model/View/Controller Architecture)
상호작용 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller)의 세 개의 컴포넌트로 구분하는 아키텍처로, 유저인터페이스와 비즈니스 로직들을 분리하여 개발하는 방법이다.
ps. 개발자가 될려면 중요한 개념이다. 꼭 알아두자.
모델(Model) |
*애플리케이션의 핵심 기능을 포함함 *상태 변화 시 컨트롤러와 뷰에 전달함 |
뷰(View) |
*정보 표시를 관리함 *결과물 생성을 위해 모델로부터 정보를 수집함 |
컨트롤러(Controller) |
*사용자로부터 입력을 받아 모델과 뷰에 명령을 전달함 *모델에 명령을 전달해 상태를 변경하고, 뷰에 명령을 보내 표시 방법을 변경함 |
장점
*동일한 모델에 대해 다양한 뷰를 제공한다.
*효율적인 모듈화가 가능하다.
*모델과 뷰의 구분으로 사용자 인터페이스에 대한 요구 사항을 적용시키는데 용이하다.
단점
*간단한 애플리케이션에 적용하기에는 복잡하다.
*모델이 자주 변경되는 경우 업데이트 요청이 많아 뷰의 갱신이 따라가지 못한다.
클라이언트/서버 구조(Client/Server Architecture)
클라이언트(Client)와 서버(Server)로 나뉘는 아키텍처를 말한다. 하나의 서버에 다수의 클라이언트가 접속하는 일대다 관계로 구성되며, 서버는 하나의 중앙서버 또는 분산된 여러 서버가 존재할 수 있다.
구성
*클라이언트 : 사용자로부터 입력을 받아 서버에 요청을 전달함.
서버 : 수신된 요청을 수행하고, 데이터의 일관성을 유지함.
특징
*새로운 서버의 추가 및 업그레이드가 용이하다.
*데이터가 서버에 집중되어 데이터 관리가 용이하고, 보안적인 측면이 뛰어나다.
*서버에 네트워크 트래픽과 데이터가 집중되어 처리 비용이 급증할 수 있다.
계층 구조(Layered Architecture)
계층적으로 조직화가 가능한 애플리케이션에 적합한 아키텍처다. 각 계층이 특정 측면만을 전문적으로 다루기 때문에 응집력 있는 설계가 가능하여, 설계를 더욱 쉽게 이해할 수 있도록 한다. 대표적으로 OSI7계층이 있다.
*상위 계층은 하위 계층의 서비스 제공자가 되고, 하위 계층은 상위 계층의 클라이언트의 입장에 선다.
*복잡한 문제를 점진적이고 순차적으로 분할하여 구현할 수 있다.
*인접 계층 사이에서만 요청과 응답이 이루어지며, 변경 사항을 적용할 때에도 두 개의 계층에만 영향을 미쳐 원할한 변경이 가능하다.
*특정 계층만을 교체해 시스템을 개선하는 것이 가능하나, 동작이 변경될 경우 단계별 재작업이 필요하다.
*구축 시 레이어의 적절한 개수나 규모를 결정하는 것에 어려움이 있다.
파이프 필터 구조(Pipes and Filters Architecture)
데이터의 흐름을 점진적으로 처리하는 시스템을 위한 아키텍처이다. 프로세싱을 위한 시스템이 각 필터에 캡슐화 되어 있으며, 데이터는 인접 필터 사이의 파이프를 통해 전달되는 형태이다.
*각 필터들은 상호 독립적이며 자신 앞의 필터나 뒤에 있는 필터에 대한 정보를 알 수 없다.
*모든 데이터 처리 순서는 파이프 구조와 각각의 필터를 통해 조정 가능한 이벤트에 의해 통제된다.
장점
*설계자는 몇 개의 필터들을 간단히 조합하여 시스템의 입/축력 행위를 이해할 수 있다.
*새로운 필터를 기존의 구조에 추가하거나 통합하는것이 가능하다.
*각 필터의 독립적인 구조로 인해 다양한 시스템에 적용할 수 있는 재사용성을 가진다.
*각 필터들의 독립적인 수행이 가능해 동시 수행(Concurrency)으로 효율증진을 노릴 수 있다.
*응답성(throughput)이나 데드락(deadlock)과 같은 특수한 분석들을 지원한다.
단점
*상태 정보를 공유하는데 유연하지 못한다.
*각 필터 간 공통된 특성이 적어 각 필터가 전송받은 데이터를 다시 파싱(Parsing)해야 하는 경우가 발생할 수 있다.
문제1. 애플리케이션 개발 모델 유형에서 MVC의 개념과 장점을 설명하시오.
답:
개념 :
*모델, 뷰, 컨트롤러 세 개의 컴포넌트로 구분하는 아키텍처
*유저 인터페이스와 비즈니스 로직들을 서로 분리하여 개발하는 방법
장점 :
*동일한 모델에 대해 다양한 뷰를 제공한다.
*효율적인 모듈화가 가능하다.
*모델과 뷰의 구분으로 사용자 인터페이스에 대한 요구 사항을 적용시키는데 용이하다.
문제2. 다음 괄호 (1~4)안에 들어갈 가장 적합한 용어를 쓰시오.
*IEEE1471은 소프트웨어 집약적인 시스템에서 아키텍처가 표현해야 하는 요소와 내용들, 이들 간의 관계를 규정하고 있는 국제 표준이다. *대표적인 특징으로는 (1), (2), (3), (4)이(가) 있다. |
답: 표준화, 중립성, 유연성, 의사소통
문제3. 다음 설명에 가장 어울리는 아키텍처 모델을 쓰시오.
*상위 계층은 하위 계층의 서비스 제공자가 되고, 하위 계층은 상위 계층의 클라이언트의 입장에 선다. *복잡한 문제를 점진적이고 순차적으로 분할하여 구현할 수 있다. *인접 계층 사이에서만 요청과 응답이 이루어지며, 변경 사항을 적용할 때에도 두 개의 인접 계층에만 영향을 미쳐 원할한 변경이 가능하다. |
답: 계층구조
문제4. 애플리케이션 개발 모델 중 클라이언트/서버 특징을 간략히 서술하시오.
*서버 추가 및 업그레드 용이하다
*데이터가 서버에 집중되어 관리가 용이하고, 보안적인 측면이 뛰어나다.
*서버에 트래픽과 데이터가 집중되어 처리 비용이 급증할 수 있다.
문제5. 애플리케이션 개발 모델 중 파이프 필터 구조(Pipes and Filters Architecture)의 개념을 간략히 서술하시오.
데이터 흐름을 점진적으로 처리하는 시스템을 위한 아키텍처이다. 프로세싱을 위한 시스템이 각 필터에 캡슐화 되어 있으며, 데이터는 인접 필터 사이의 파이프를 통해 전달되는 형태이다.
문제6. 애플리케이션 개발 모델 유형 중 하나인 MVC 모델에서 M,V,C 각각의 구성 요소의 약자를 의미한다. 약자로 표현된 M, V, C의 완전 이름을 쓰시오.
답:
M: 모델(Model)
V: 뷰(View)
C:컨트롤러(Controller)
'정보처리기사 > 실기' 카테고리의 다른 글
정보처리기사 실기 용어 사이트 (0) | 2018.06.30 |
---|---|
정보처리기사 실기 1회차 시원하게 말아먹었습니다 ㅠㅠ (0) | 2018.05.25 |