2022년 소공 기출문제를 정리 합니다
Agenda
1. Refactoring 기법
2. Java code error (30번 문제)
3. TC coverage 계산(33번 문제)
4. 아키텍처 스타일 (32번 문제)
5. 아티텍처 평가 - CBAM, ATAM (36번 문제)
6. Spring - 모듈간 상호의존 관계 (39번 문제)
7. Chidamber, Kemerer의 객체지향 척도 - LCOM, WMC, RFC (40번 문제)
8. Design pattern - command. Adapter pattern (43번 문제)
9. Sequence 와. Class. 과 연계 설명 (45번 문제)
10. Sequence 에서 순환복잡도 cbo. 결합도 (50번 문제)
1. Refactoring 기법
- Encapsulate 기법 : 캡슐화 기법
- Refactoring : Replace error code with exception
<변경 전>
int withdraw (int amount) {
if (amount > _balence)
return -1;
else {
_balence -= amount;
return 0;
}
}
<변경 후>
void withdraw(int amount) throws B_exception {
if (amount > _balence) throw new B_exception();
_blanece -= amount;
}
2. Java code error (30번 문제)
아래 코드의 실행 결과
import java.util.*;
public class Search {
public static int search(List<Integer>list, int k) {
int left = 0, right = list.size() -1, result = -1;
while (left <= right) {
int mid = left + ((right - left) / 2);
System.out.println("mid=" + mid+", left=" + left+",right=" + right);
//2) list로 1,2,3,4받고, k=3을 받으면, right=3이되고, int mid는 1.5인데, int로 1임
//6) right=3, left=2 으로 변경, mid=2로 변경
if (list.get(mid) > k) { // 3) (mid=1 > 3) false 임으로 -> 4)번으로 이동
right = mid - 1;
System.out.println("찾으려는 k 보다 list(mid) 값이 더 큼, right값 변경, right ="+right);
} else if(list.get(mid) == k) {
result = mid;
right = mid -1;
System.out.println("k 값을 찾았음, right값 변경, right="+right);
}else {
left = mid +1; // 4) mid=1 임으로, left=2로 변경됨
System.out.println("찾으려는 k 보다 list(mid) 값이 작음, left를 mid+1로 변경, left ="+ left);
} // 5) 다시 while으로 진행
}
return result;
}
public static void main(String[] args) {
Integer[] intArr = {1,2,3,4};
List<Integer>list = Arrays.asList(intArr);
System.out.println(search(list,3)); // 1) search함수를 호출함, value= list, k는 3을 할당함
}
}
실행결과
1,2,3,4
3
mid=1, left=0,right=3
찾으려는 k 보다 list(mid) 값이 작음, left를 mid+1로 변경, left =2
mid=2, left=2,right=3
k 값을 찾았음, right값 변경, right=1
2
3. TC coverage 계산(33번 문제)
white box test coverage 계산하기
위 설명 자료) - 아래 영상 여러번 스터디 필요
https://www.youtube.com/watch?v=K59d8XduE28
4. 아키텍처 스타일 (32번 문제)
5. 아티텍처 평가 - CBAM, ATAM (36번 문제)
- ATAM : 비 기능 요구사항에 대한 품질속성간 Trade off를 고려한 평가, 즉 품질속성간에 상출관계, 상호작용 등을 고려하여 평가
- CBAM : COST를 고려한 평가 방법
https://www.youtube.com/watch?v=-tGKFQwSWJU
6. Spring - 모듈간 상호의존 관계 (39번 문제)
- Sprint 설명
https://www.youtube.com/watch?v=q_QEh3fz0zw&t=397s
- Sprint 의존성 설명, spring의존성은 기본적인 개념으로, 일반적으로 교재 맨 처음에 다뤄질 정도임
간단한 설명 : https://www.youtube.com/watch?v=64qjrPrTuU4
7. Chidamber, Kemerer의 객체지향 척도 - LCOM, WMC, RFC (40번 문제)
8. Design pattern - command. Adapter pattern (43번 문제)
1) command pattern : 명령들을 object 처럼 사용 ( 예: printf() ), 명령이 객체화 됬다는 것이 중요한 패던임
https://www.youtube.com/watch?v=Y5vh-6fsW7Q
- 위의 영상에서 command pattern 설명소스는
- Main class
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<command> list = new LinkedList<>();
list.add(new command() {
@Override
public void execute() {
System.out.println("work1");
}
});
list.add(new command() {
@Override
public void execute() {
System.out.println("work2");
}
});
for (command command : list) {
command.execute();
}
}
}
- command interface 정의 : execute 를 object 처럼 사용하기 위한 interface 정의
public interface command {
void execute();
}
2) Adapter 패턴
- 연관성 없는 두 객체 묶어서 사용하기
기본설계는 기존의 adaptee 알고리즘을 adapter라는 기능을 통해서 사용하는 개념
- Main class
public class Main {
public static void main(String[] args) {
Adapter adapter = new AdapterImpl();
System.out.println(adapter.twiceOf(100f));
System.out.println(adapter.halfOf(88f));
}
}
- Math class
public class Math {
//두배
public static double twoTime ( double num) { return num*2; }
//절반
public static double half (double num) { return num/2;}
//강화된 알고리즘
public static Double aDoubled (Double d) { return d*2;}
}
- AdapterImpl class
public class AdapterImpl implements Adapter{
public Float twiceOf(Float f) {
return null;
}
public Float halfOf(Float f) {
return (float) Math.twoTime(f.doubleValue());
}
}
- Adapter class
public interface Adapter {
// 원하는 기능
public Float twiceOf(Float f);
public Float halfOf(Float f);
}
https://www.youtube.com/watch?v=gJDZ7pcvlAU
9. Sequence 와. Class. 과 연계 설명 (45번 문제)
10. Sequence Diagram에서 순환복잡도 cbo. 결합도 (50번 문제)
다음 sequence diagram을 바탕으로 Class1의 m1() 연산에 대한 CC(순환복잡도)와 Class의 CBO(Coupling Between Objects)의 값으로 가장 적 절한 것은?(단, CBO를 계산할 때 Class1을 이용하 는 다른 클래스는 포함하지 않음을 가정한다.)
풀이) 위의 문제에서
- CC = 3 +1 = 4, 3(Loop, Break, opt)
- CBO = Class2, Class 3 = 2
- 년도별 기출정리가 잘 되어 있는 사이트 : 50번 문제 풀이 포함
https://blog.naver.com/newzio/222852489536
'- 배움이 있는 삶 > - 소프트웨어 공학' 카테고리의 다른 글
2021년 기출문제-소공(ing) (11) | 2024.11.04 |
---|---|
2020년 기출문제 - 소공 정리(디자인패턴 다시 공부) (2) | 2024.10.16 |
소공-기본과정 정리 (3) | 2024.10.02 |