코딩일기/자격증
[정보처리기사] [Java] 인터페이스 구현 | 짝수와 홀수의 합 구하기 | 2024년 2회 정보처리기사 실기 기출문제
jhy_2023
2025. 4. 18. 22:53
728x90
반응형
2024년 2회 정보처리기사 실기 기출문제
문제
다음 Java 코드를 실행했을 때 출력 결과를 쓰시오.
class Main {
public static void main(String[] args) {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
ODDNumber OE = new ODDNumber();
System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
}
}
interface Number {
int sum(int[] a, boolean odd);
}
class ODDNumber implements Number {
public int sum(int[] a, boolean odd) {
int result = 0;
for(int i = 0; i < a.length; i++) {
if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
result += a[i];
}
return result;
}
}
정답
25, 20
반응형
해설
1️⃣ interface Number
interface 인터페이스이름 {
반환형 메서드이름(매개변수);
}
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에서 정의한 메서드를 '반드시' 구현해야 함
}
- 인터페이스(Interface)는 클래스가 반드시 구현해야 하는 메서드의 형식을 미리 선언해 놓은 일종의 설계도입니다. 즉, 인터페이스는 기능을 정의만 할 뿐, 구체적인 동작 방식은 구현하지 않습니다.
- 인터페이스(Interface)란 클래스를 작성할 때 기본이 되는 틀을 제공하는 일종의 추상 클래스
- 추상 클래스란 클래스들의 공통되는 속성과 메소드를 정의한 구체적이지 않은 클래스로 extends 키워드를 사용해서 추상 클래스를 상속한다.
- 인터페이스는 메서드의 이름, 매개변수, 반환 타입만 선언합니다.
- 인터페이스를 사용하는 클래스는 implements 키워드를 통해 해당 인터페이스를 구현합니다.
- 인터페이스를 구현한 클래스는 모든 메서드를 반드시 정의(구현) 해야 합니다.
interface Number { // 틀
int sum(int[] a, boolean odd);
}
- Number는 인터페이스입니다.
- sum()이라는 메서드를 정의하고 있으며, 매개변수로 정수 배열과 boolean 타입의 odd를 받습니다.
- boolean은 참(true) 또는 거짓(false) 두 가지 값만 가질 수 있는 논리형 자료형입니다.
- 메서드의 내용은 정의하지 않고 형식만 선언되어 있습니다.
2️⃣ class ODDNumber implements Number
class ODDNumber implements Number { // 구현
public int sum(int[] a, boolean odd) {
int result = 0;
for(int i = 0; i < a.length; i++) {
if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
result += a[i];
}
return result;
}
}
- ODDNumber 클래스는 Number 인터페이스를 구현(implements)하고 있습니다.
- 따라서 Number 인터페이스에서 정의한 sum() 메서드를 반드시 구현해야 합니다.
- 이 클래스에서는 odd 값에 따라 홀수 또는 짝수의 합을 계산하는 로직을 담고 있습니다.
728x90
3️⃣ sum() 메서드 구현부
public int sum(int[] a, boolean odd) {
int result = 0;
for(int i = 0; i < a.length; i++) {
if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
result += a[i];
}
return result;
}
- int result = 0;
- result 변수는 누적 합계를 저장하기 위한 변수입니다.
- 이 변수는 메서드 실행 도중 계속 값을 누적하다가, 마지막에 최종 결과로 반환됩니다.
- for(int i = 0; i < a.length; i++)
- 이는 반복문(for loop)입니다.
- i는 배열의 인덱스를 나타내며, 0부터 a.length - 1까지 증가합니다. i = 0부터 시작하여 i = 8까지 총 9번 반복하게 됩니다.
- a.length는 배열의 전체 길이이므로, 이 반복문은 배열 a의 모든 요소를 하나씩 검사하게 됩니다.
(이 배열에는 총 9개의 정수 요소가 들어 있으므로, a.length == 9)
- if ((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
- %는 나머지를 구하는 연산자입니다.
- a[i] % 2 != 0
→ 해당 숫자를 2로 나눴을 때 나머지가 1이면 홀수입니다.
예: 3 % 2 = 1 → 홀수 - a[i] % 2 == 0
→ 해당 숫자를 2로 나눴을 때 나머지가 0이면 짝수입니다.
예: 4 % 2 = 0 → 짝수 - !는 부정 연산자입니다. 이 연산자는 뒤에 오는 조건을 반대로 바꿔주는 역할을 합니다.
- odd = true일 때, !odd = false가 되고, odd = false일 때, !odd = true가 됩니다.
- (조건1) || (조건2) : 이 조건문은 두 개의 조건을 '또는(OR)'로 연결한 형태입니다. 즉, 조건1이 참이거나, 조건2가 참이면 전체 조건은 참이 됩니다. 즉, 이 조건문은 두 상황 중 하나라도 만족하면, a[i]를 누적합(result)에 더하는 역할을 하게 됩니다.
- && 연산자 (AND 연산자)는 양쪽 모두가 true일 때만 전체가 true가 됩니다. 하나라도 false가 껴 있으면 결과는 무조건 false입니다.
- 조건 1: (odd && a[i] % 2 != 0)
- 이 조건은 다음 두 가지가 모두 참일 때 참입니다. 1. odd가 true일 것 2. a[i] % 2 != 0 → 현재 요소가 홀수일 것
- 조건 2: (!odd && a[i] % 2 == 0)
- 이번에는 반대의 경우입니다. 1. odd가 false일 것 2. a[i] % 2 == 0 → 현재 요소가 짝수일 것
- 조건 1: (odd && a[i] % 2 != 0)
- 위 조건을 만족하는 경우, 즉 홀수 또는 짝수일 때 현재 숫자를 result에 누적합니다. result += a[i]는 result = result + a[i]와 같은 의미입니다.
4️⃣ Main 클래스
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
ODDNumber OE = new ODDNumber();
System.out.print(OE.sum(a, true) + ", " + OE.sum(a, false));
public int sum(int[] a, boolean odd) {
int result = 0;
for(int i = 0; i < a.length; i++) {
if((odd && a[i] % 2 != 0) || (!odd && a[i] % 2 == 0))
result += a[i];
}
return result;
}
- 배열 a에 1부터 9까지의 정수를 저장합니다.
- ODDNumber 객체를 생성하고, sum() 메서드를 호출합니다.
- OE.sum(a, true) 호출 시, odd는 true가 되며, !odd는 false로 간주되어 두 번째 조건은 평가되지 않고 무시됩니다. 따라서 홀수만 더하는 로직이 실행됩니다.
- 결과: 1 + 3 + 5 + 7 + 9 = 25
- OE.sum(a, false) 호출 시, odd는 false가 되며, !odd는 true로 간주되어 첫 번째 조건은 평가되지 않고 무시됩니다. 따라서 짝수만 더하는 로직이 실행됩니다.
- 결과: 2 + 4 + 6 + 8 = 20
5️⃣ 출력
- OE.sum(a, true)는 배열에서 홀수만 더하므로, 1 + 3 + 5 + 7 + 9 = 25가 됩니다.
- OE.sum(a, false)는 배열에서 짝수만 더하므로, 2 + 4 + 6 + 8 = 20이 됩니다.
- 따라서 출력은: 25, 20
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형