극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩테스트 입문

[프로그래머스, 입문] 배열 두배 만들기

sundori 2024. 6. 14. 15:30

목차

    #배열 두배 만들기

    정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

    추상 클래스

     추상 클래스는 객체로 만들 수 없는 클래스이다. 따라서 서브 클래스에 상속한 후 객체를 만들어 사용한다.

    인터페이스나 추상 메서드의 개념을 이해하기는 쉽지 않다. 추상메소드와 관련된 정보는 많이 있지만.. 이것이 어디에 쓰기위해 존재하는지에 대해서 명확하게 정리되어 있지 않으면 이미 만들어져 있는 추상메소드를 코딩은 하지만 직접 클래스를 만들면서 추상 메소드가 가진 목적을 발휘하는 그런 클래스를 디자인하고 만들어 쓰는데까지는 가지 못하였다.

     

     그러면 이러한 추상 클래스를 왜 사용하는가?

    우리가 사용하는 운영체제를 보면 컴퓨터를 부팅할 때 로고가 나온다. 이러한 로고는 반드시 보여야한다고 가정하자.

    왜냐하면 대부분의 운영체제에서 자신들만의 로고가 무조건 나오기에...

     

     우리가 전원을 킬 때 상속받는 하위 클래스들에서는 전원을 킬 때 반드시 제조사의 로고 이미지를 뜨도록 강제하고자 하다면 그에 해당하는 기능을 추상 메소드로 만들어 두면 하위 클래스에서는 반드시 로고 이미지가 뜨는 기능(메서드)을 만들어야만 되도록 되어있는 것이 추상 클래스와 추상 메서드이다.  만약 하위 클래스에서 전원을 킬 때 로고가 나오는 기능을 사용하지 않는다면 컴파일 단계에서 오류가 발생한다.

    그것을 상속 받는 하위 클래스에서는 무조건 로고 이미지 뜨는 기능을 구현해야만되고 이것은 하위 클래스들은 이러한 점에서 공통성을 가지게 하는 것이다.

    abstract class 클래스명{
    	속성 및 메서드 정의
    }

    추상 메서드

    추상 메서드는 내용이 없는 껍데기 메서드를 말한다. 밑의 코드처럼 getResult()의 내용을 의미하는 코드가 담겨있는 중괄호 {}가 없다.

    abstract 반환형 메서드명(매개변수);

     

    이렇게 본체 코드가 없는 추상 메서드는 어떻게 작동하는가 할 수 있다. 추상 메서드의 목적은 상속받은 서브 클래스에서 무조건 오버라이딩하여 사용하도록 하는 데 있다. 다시 말해 부모 클래스에서는 추상 메서드로 메서드의 껍데기를 만들어놓고 각각의 서브 클래스에서 실제 내용을 채워넣어 사용하는 방법이다.

     

    // 추상 클래스 MultiplyIntegersByTwo를 선언.
    abstract class MultiplyIntegersByTwo {
        int[] result; // 결과를 저장할 정수 배열을 멤버 변수로 선언.
    
        // 추상 메서드 getResult를 선언. 이는 구체적인 구현 클래스에서 구현되어야 함.
        abstract int[] getResult(int[] numbers);
    }
    
    // Solution 클래스는 MultiplyIntegersByTwo 클래스를 확장.
    class Solution extends MultiplyIntegersByTwo {
        @Override
        public int[] getResult(int[] numbers) {
        	// 추상 클래스의 멤버 변수 result를 numbers의 길이로 초기화.
            result = new int[numbers.length];
    
            // 주어진 배열 numbers의 각 원소를 2배하여 result 배열에 저장.
            for (int i = 0; i < numbers.length; i++) {
                result[i] = numbers[i] * 2; // 각 원소를 2배하여 저장.
            }
    
            return result; // 2배된 값들이 저장된 result 배열을 반환.
        }
    
        // solution 메서드는 주어진 배열 numbers를 받아 getResult 메서드를 호출.
        public int[] solution(int[] numbers) {
            return getResult(numbers); // getResult 메서드의 결과를 반환.
        }
    }