JAVA/JAVA Academy Project

JAVA 시험 대비로 만들어보는 초급 문제 6가지

우아개발자 2023. 11. 6.

JAVA 시험대비로 만들어보는 초급 문제, JAVA 코딩 테스트가 아닌, 기초적인 문제로 아이디와 비밀번호를 로그인하기까지의 실행과정과 파일을 열어보는 문제를 초급 문제로 정리해 보도록 하겠습니다.

 

jAVA 시험 대비로 만들어 보는 초급 문제 6가지 - 설명하기

CLASS Student {
private int studentID;
private String studentName;
private int grade;
private String address
}

(1) 자바에서 매개변수를 가지는 생성자를 직접 정의할 때, 기본 생성자(매개 변수를 가지지 않는 생성자가)가 자동으로 생성되지 않는 이유는 무엇입니까?

초급 문제 아래와 같은 매개변수를 받는 생성자를 만들 때, 기본 생성자는 자동으로 생기지 않습니다. 그렇기 때문에 따로 지정을 해서 기본생성자를 만들어줘야하는데요. 왜 기본 생성자가 만들어지지 않을까요?

그 이유는 두 가지로 나눌 수 있습니다.

 

1. 첫 번쨰는 명시적 선언 우선순위(명시적으로 선언된 생성자가 기본 생성자 대신 사용되도록 하기 때문입니다.

2. 두 번째 생성자의 오버로딩 : 자바 클래스에서 여러 생성자를 정의할 수 있는데, 각 생성 다는 다른 매개변수를 받을 수 있게 됩니다. 이때 다양한 생성자를 오버로딩이라고 하며, 클래스 작성자는 생성자를 직접 정의할 수 있습니다. 그리고 위의 논리와 똑같이 명시적으로 직접 정의한 것을 우선적으로 생성하게 됩니다.

(2) 오버로딩에 대한 설명을 해보세요.

자바에서 오버로딩은 메서드 또는 생성자 이름이 같지만 매개변수의 수, 혹은 데이터의 타입 또는 순서가 다 여러 버전을 정의하는 것으 말합니다. 오버로딩된 메서드들은 동일한 이름을 가져야 하며, 동일한 역할을 하는 메서드들을 하나의 이름으로 그룹화할 수 있습니다.

public class OverloadingExample {

    // 정수형 매개변수를 받는 메서드
    public void printNumber(int num) {
        System.out.println("정수: " + num);
    }

    // 실수형 매개변수를 받는 메서드
    public void printNumber(double num) {
        System.out.println("실수: " + num);
    }

    // 문자열 매개변수를 받는 메서드
    public void printNumber(String str) {
        System.out.println("문자열: " + str);
    }

    public static void main(String[] args) {
        OverloadingExample example = new OverloadingExample();
        
        example.printNumber(42);        // 정수: 42
        example.printNumber(3.14);      // 실수: 3.14
        example.printNumber("Hello");   // 문자열: Hello
    }
}

위의 예제에서의 메서드는 다른 매개변수의 유형을 받고 메서드의 호출 시에는 전달된 값에 따라서 적절한 오버로딩된 메서드 호출됩니다. 오버로딩은 가독성을 높이고 메서드 이름을 일관성 있게 대응할 수 있는 유용한 기능입니다.

(3) 오버라이딩에 대한 설명을 하세요.

자바에서 오버라이딩(Overriding)은 상속관계에서 부모 클래스의 메서를 자식 클래스에서 재정의하는 것을 의미합니다. 오라이딩은 부모 클래스와 자식클래스 관계 즉, 상속관계에서만 발생하게 되는데, 자식 클래스가 부모 클래스로부터 메서드를 상속받아, 재정의하는 것입니다.

 

오버라이딩되는 메서드는 메서드 이름, 매개변수의 목록 및 반환 값의 데이터 타입이 부모 클래스의 메서드와 동일해야 합니다. 또한, 자식 클래스에서 오버라이딩된 메서드 접근 제어자는 부모 클래스의 메서드와 같거나 접근 범위가 넓을 수 있지만, 더 좁아서는 안됩니다.

class Animal {
    void makeSound() {
        System.out.println("동물이 소리를 낸다.");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("개가 짖습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myPet = new Dog();
        myPet.makeSound(); // "개가 짖습니다."
    }
}

 

(4) toString에 대한 내용을 작성해보세요.

toString이란 메서드 내에서 객체의 필드 값을 문자열로 반환하 그 문자열을 반환하는 값을 말합니다. 원하는 형식과 정보에 따라서 문자열을 구성합니다. 예를 들면 person 클래스에서 toString이라고 했을 때, name은 String으로, age는 int로 받는 private이 설정되어 있다고 가정해 봅니다. 그렇다면 생성자를 제외한 toString은 아래와 같은 코드값을 불러올 수 있습니다.

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }

 

(5) super에 대한 내용을 설명해 보세요.

부모 클래스의 멤버에 접근할 수 있는 키워드라고 생각하면 됩니다. super를 이용해서 현재 클래스의 부 클래스에서 상속한 필드, 메서드 또는 생성자에 접근할 수 있습니다. 이것은 상속계층에서 동일한 이름의 멤버가 있는 경우 특히 유용합니다. 그리고 부모 클래스의 생성자 명시적으로 호출할 수 있습니다.

(6) continue의 사용용도가 어느 것인지 말해보세요.

자바에서 continue는 반복문을 사용할 때 주로 사용하게 되는데, 반복문에서 특정한 조건을 만족하게 될 때, 특정 조건 스킵하고 다음 항목을 진행하려 할 때 사용되기도 합니다.

for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        continue; // 짝수일 때는 다음 반복으로 건너뜁니다.
    }
    System.out.println(i);
}
for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        continue; // i가 5일 때 현재 반복을 건너뜁니다.
    }
    System.out.println(i);
}

 

댓글