코딩일기/자격증

[정보처리기사] [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 → 현재 요소가 짝수일 것
  • 위 조건을 만족하는 경우, 즉 홀수 또는 짝수일 때 현재 숫자를 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
반응형