- 모든 문장이 최소한 한 번은 실행되는 것을 보장하는 개념은 구문 커버리지입니다. 이는 코드의 구문적 구조를 기반으로 모든 명령문이 실행되는지 확인합니다.
- 조건이 참(True)과 거짓(False)으로 나뉘어 모든 가능한 경로를 테스트하는 기준은 결정 커버리지입니다. 주로 if-else 문 같은 결정 지점의 모든 결과를 검증합니다.
- 전체 조건식의 결과가 아닌 각 개별 조건식의 참/거짓 상태를 모두 테스트하는 것은 조건 커버리지입니다. 즉, 각 조건이 독립적으로 참과 거짓이 되는 모든 경우를 커버하는 것을 의미합니다. 이는 변형 조건/결정 커버리지보다 더 세분화된 검증을 포함합니다.
- 전체 조건식 평가 결과도 테스트 - 조건/결정 커버리지
- 가상 회선 방식: 이 방식은 통신을 시작하기 전에 송신자와 수신자 간에 가상적인 연결을 설정합니다. 즉, 두 호스트 사이에 미리 경로를 확보하고, 그 경로를 통해 데이터 패킷을 순차적으로 전송합니다. 연결이 설정된 후에는 패킷들이 일정한 순서로 전달되어 신뢰성 있는 통신이 가능합니다. 주로 X.25 네트워크나 ATM(Asynchronous Transfer Mode)에서 사용됩니다.
- 데이터그램 방식: 이 방식은 각 패킷이 독립적으로 라우팅되며, 통신 시작 시 별도의 연결 설정 과정이 필요하지 않습니다. 각 패킷은 헤더 정보만으로 목적지로 보내지며, 개별 패킷의 경로는 서로 다를 수 있습니다. 이로 인해 패킷 손실이나 순서 변경이 발생할 수 있지만, 오버헤드가 적고 유연한 네트워크 환경에서 효율적으로 작동합니다. IP 패킷 기반의 인터넷 통신이 대표적인 예입니다.
- (1) 절차적 응집도:
- 이 문항은 모듈 내에서 명령의 실행 순서가 중요함을 강조한다. 입출력의 직접적인 연관성은 없지만, 특정 순서대로 실행되어야 하는 경우를 말한다. 따라서 절차적 응집도가 적합하다. 순서 의존성은 모듈 내부의 실행 흐름에 초점을 맞추기 때문이다.
- (2) 통신적 응집도:
- 동일한 입출력 데이터를 여러 동작들이 공유하고 사용하는 상황을 묘사한다. 즉, 여러 기능이 동일한 데이터 세트를 통해 상호작용하며, 이들 간의 데이터 교환이 주요 특징이다. 이런 특성은 통신적/ 교환적 응집도를 나타낸다.
- (3) 기능적 응집도:
- 모듈 내의 모든 요소가 하나의 주요 기능을 수행하는 데 필수적이고 밀접하게 연결되어 있다는 점을 강조한다. 각 부분이 함께 작용하여 단일 목표를 달성하는 경우, 이는 기능적 응집도를 의미한다. 모든 요소가 공통의 목적을 위해 협력하는 모습이 이에 해당한다.
- 우연적 응집도: 아무 관련 없는 기능이 묶임 (최악)
- 논리적 응집도: 비슷한 성격의 기능을 선택적으로 실행
- 시간적 응집도: 동시에 실행되는 초기화 작업 등
- 순차적 응집도: 하나의 출력이 다음 기능의 입력이 되는 구조
병행제어기법 중 접근한 데이터에 대한 모든 연산이 완료될 때까지 다른 프로세스나 쓰레드가 해당 데이터에 접근하지 못하도록 차단하는 기법을 로킹(Locking)이라 한다.
이 기법은 상호배제를 실현하는 데 핵심적이며, 데이터의 일관성을 유지하고 경쟁 조건을 방지하는 데 사용된다.
로킹을 통해 자원이 잠금 상태일 때는 다른 트랜잭션이나 프로세스가 해당 자원을 수정할 수 없어, 데이터의 일관성과 안정성을 보장한다.
🏗️ 1. 생성 패턴 (Creational Pattern)
> 객체를 어떻게 생성할지에 초점을 맞춘 패턴입니다.
Singleton | 오직 하나의 인스턴스만 생성되도록 보장 |
Factory Method | 상위 클래스에서 객체 생성 인터페이스만 정의하고, 실제 생성은 하위 클래스가 결정 |
Abstract Factory | 관련된 여러 객체를 하나의 팩토리를 통해 생성 |
Builder | 복잡한 객체를 단계별로 생성 |
Prototype | 기존 객체를 복사(복제)해서 새 객체 생성 |
🧱 2. 구조 패턴 (Structural Pattern)
> 클래스나 객체를 어떻게 조합할지, 즉 구조에 초점이 있습니다.
Adapter | 호환되지 않는 인터페이스 간 중간다리 역할 |
Bridge | 구현과 추상을 분리해서 독립적으로 확장 가능하게 |
Composite | 객체들을 트리 구조로 구성 → 부분-전체 계층 구조 |
Decorator | 기존 객체에 책임(기능)을 추가 |
Facade | 복잡한 서브시스템에 대한 단순한 통합 인터페이스 제공 |
Flyweight | 공유 가능한 객체를 재사용하여 메모리 절약 |
Proxy | 다른 객체에 대한 대리자 역할 수행 |
🎭 3. 행위 패턴 (Behavioral Pattern)
> 객체들 간의 상호작용과 책임 분산 방식에 집중합니다.
Observer | 한 객체 상태 변화 → 연관된 객체들 자동 갱신 |
Strategy | 알고리즘을 캡슐화 → 런타임에 알고리즘 교체 가능 |
Template Method | 알고리즘 뼈대를 상위 클래스에 두고, 세부 구현은 하위 클래스가 담당 |
Command | 요청을 객체로 캡슐화해서 저장, 실행, 취소 가능 |
Mediator | 객체 간 직접 소통 대신 중재자를 통해 통신 |
State | 객체의 상태에 따라 행동을 동적으로 변경 |
Iterator, Visitor, Chain of Responsibility |
- Function Modeling: 입력값과 출력값 간의 변환 과정을 중심으로 시스템의 기능적 동작을 설명한다. 예로 주어진 자료 흐름도(DFD)는 시스템 내에서 데이터가 어떻게 처리되는지(즉, 어떤 함수로 처리되는지) 나타내므로, 이는 기능 모델링에 해당한다.
- Dynamic Modeling: 시간의 흐름에 따른 시스템 상태의 변화를 포착한다. 상태 변화를 시간에 따라 추적하는 것은 동적 모델링의 핵심으로, 상태 변화도(DFD)는 이러한 변화를 시간적 맥락에서 보여주므로 동적 모델링을 반영한다.
- Information Modeling: 시스템 내 정보의 구조와 관계를 정의한다. ER다이어그램(ERD)은 엔티티와 그들 간의 관계, 속성 등을 통해 데이터의 구조를 시각화하며, 이는 정보 모델링의 전형적인 예이다. 따라서 시스템의 데이터 구조를 나타내는 데 사용되는 이 기법은 정보 모델링에 속한다.
int mp(int base, int exp);
int main(){
int res;
res = mp(2,10);
printf("%d",res);
return 0;
}
int mp(int base, int exp) {
int res = 1;
for(int i=0; i < exp; i++){
res = res * base;
}
return res;
}
public class Test {
public static void main(String[] args){
system.out.print(Test.check(1));
}
( 괄호 ) String check (int num) {
return (num >= 0) ? "positive" : "negative";
}
}
[출력결과] positive
주어진 코드에서 check 메소드가 클래스 내부에 정의되어 있지만, 객체 생성 없이 Test.check(1) 형태로 직접 호출되고 있습니다. 이는 check 메소드가 static으로 선언되어 있기 때문입니다. static 메소드는 클래스 자체에 속하므로, 해당 클래스의 인스턴스를 생성하지 않고도 클래스 이름을 통해 직접 접근 및 호출이 가능합니다. 따라서 괄호 안에 알맞은 답안은 static입니다.
'IT 엔지니어 > 자격증' 카테고리의 다른 글
정보처리기사 실기 -4 (0) | 2025.06.27 |
---|---|
정보처리기사 실기 -3 (0) | 2025.06.26 |
정보처리기사 실기 -1 (0) | 2025.06.24 |
네트워크관리사 2급 (0) | 2025.05.13 |
리눅스마스터 2급 (0) | 2025.05.13 |