본문 바로가기

Study/개발일지

[백엔드온라인TIL] java 학습 13일차

  1. 다음 코드의 출력은 무엇입니까?

        (A) 2 (B) 3 (C) 4 (D) 5

        int[] arr = {1, 2, 3, 4, 5}; System.out.println(arr[2]);

 

       정답 : 3

2. 다음 코드의 출력은 무엇입니까?(A) el (B) ello (C) llo (D) ol

        String str = "hello"; System.out.println(str.substring(1, 3));

 

정답 :  A

3.  다음 코드의 출력은 무엇입니까?

(A) 소수입니다. (B) 소수가 아닙니다.

 

boolean isPrime = true;
int n = 13
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println("소수입니다.");
} else {
System.out.println("소수가 아닙니다.");
}

 

정답 : A 

 

4. 다음 코드의 출력은 무엇입니까?

(A) 성인입니다. (B) 미성년자입니다.

Scanner scanner = new Scanner(System.in);
System.out.println("나이를 입력하세요: ");
int age = scanner.nextInt();
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}

 

5. 다음 코드의 출력은 무엇입니까? 

 

int n = 10; for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); }

 

 

(A) 

*
**
***
****
*****
******
*******
********
*********
**********

(B)

**********
*********
********
*******
******
*****
****
***
**
*

정답 : A

 

6. 다음 코드의 출력은 무엇입니까?(A) 10 (B) 55 (C) 110 (D) 121

int n = 10; int sum = 0; for (int i = 1; i <= n; i++) { sum += i; } System.out.println(sum);

정답 : B

 

7. 객체 배열에 대한 설명으로 옳은 것은?

a. 객체 배열은 동일한 클래스의 객체들을 저장하기 위한 자료구조이다.

b. 객체 배열은 크기를 동적으로 조정할 수 있다.

c. 객체 배열의 각 요소는 동일한 인스턴스를 참조할 수 없다.

d. 객체 배열은 기본형 데이터 타입만 저장할 수 있다.

정답 : A

해설 : 객체 배열은 동일한 클래스의 객체들을 저장하기 위한 자료구조입니다.

 

8. 변수의 종류에 대한 설명으로 옳은 것은?

a. 클래스 변수는 클래스의 인스턴스마다 독립적인 값을 가지며, 인스턴스 변수는 클래스에 공통된 값을 가진다.

b. 지역 변수는 메서드 내에서 선언되며, 메서드 실행이 끝나면 소멸된다.

c. 인스턴스 변수는 메서드 내에서 선언되며, 메서드 실행이 끝나도 값이 유지된다.

d. 클래스 변수는 메서드 내에서 선언되며, 메서드 실행이 끝나도 값이 유지된다.

 

정답 : b

 

해설 : 지역 변수는 메서드 내에서 선언되며, 메서드 실행이 끝나면 소멸됩니다.

인스턴스 변수

 인스턴스 변수는 인스턴스가 생성될 때 생성됩니다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야합니다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야할 때는 인스턴스 변수로 선언합니다.

 

 

클래스 변수

  클래스 변수는 인스턴스 변수에 static만 붙여주면 됩니다. 인스턴스 변수는 각각 고유한 값을 가지지만 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 됩니다. 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언합니다. 클래스가 로딩될 때 생성되어(그러므로 메모리에 딱 한번만 올라갑니다.) 종료 될 때 까지 유지되는 클래스 변수는 public 을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 됩니다. 또한 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스이름.클래스변수명 을 통해서 접근할 수 있습니다.

 

9. 오버로딩의 조건으로 옳은 것은?

a. 메서드 이름은 같아야 하고, 매개변수의 개수와 순서는 달라야 한다.

b. 메서드 이름은 같아야 하고, 매개변수의 개수와 순서는 같아야 한다.

c. 메서드 이름은 달라야 하고, 매개변수의 개수와 순서는 달라야 한다.

d. 메서드 이름은 달라야 하고, 매개변수의 개수와 순서는 같아야 한다.

 

정답 :  a

 

해설 : 

1. 메소드의 이름이 같아야 합니다.

2. 메소드의 시그니처, 즉 매개변수의 개수 또는 타입이 달라야 합니다.

메소드 오버로딩은 반환 타입과는 관계가 없습니다.

 

10. 생성자에서 다른 생성자를 호출하기 위한 키워드는?

a. new

b. super

c. this

d. instance

정답  a,b,c

  • (a) 다른 클래스의 생성자는 'new'
  • (b) 부모 클래스의 생성자는 'super'
  • (c) 같은 클래스의 다른 생성자를 호출하기 위한 키워드는 'this'

 

해설 

this() 메서드는 자신이 속한 클래스 내부에 다른 생성자를 호출하는 명령이다. 만일 클래스 명이 A라면 A() 생성자를 호출하는 것이라고 생각하면 된다. 만일 this(3)이라면 A(3), 즉 int 데이터 하나를 입력받는 생성자를 호출하라는 말이 된다.
this()메서드를 구성할 때는 반드시 2가지 문법적 규칙을 지켜야 한다. 첫 번째는 생성자의 내부에서만 사용할 수 있다. 즉, 생성자의 내부에서만 또 다른 생성자를 호출할 수 있다는 말이다. 두 번째는 생성자의 첫 줄에 위치해야 한다. 이 둘 중 어느 하나라도 지켜지지 않으면 바로 오류가 발생한다.

다음 예제를 살펴보자. 클래스 A에는 2개의 생성자가 있다. 생성자가 2개이므로 객체를 생성하는 방법도 2개다. 첫 번째 생성자는 기본 생성자로 내부에는 1개의 출력문이 있다. 따라서 A a1 = new A()와 같이 객체를 생성하면 이 과정에서 첫 번째 생성자가 호출되고 그 결과 "첫 번째 생성자"라는 문자열이 출력된다. 두 번째 생성자로 객체를 생성하는 A a2 = new A(3)을 실행하면 일단 객체 생성 과정에서 두 번째 생성자가 실행된다. 이 생성자의 첫 번째 명령은 this()이고 이는 자신의 또 다른 생성자인 A()를 호출하라는 말이다. 따라서 먼저 첫 번째 생성자가 호출된 후 나머지 코드가 실행되므로 "첫 번째 생성자"와 "두 번째 생성자"가 모두 출력되는 것이다.

실습

class A {
    A() {
        System.out.println("첫 번째 생성자");
    }
    A(int a){
        this(); // 반드시 생성자의 첫 줄에 위치해야 함.
        System.out.println("두 번째 생성자");
    }
}
/*
void abc(){
this();            메서드에선 this() 메서드 사용 불가능
 */

public class jh {
    public static void main(String[] args) {
        // 객체 생성
        A a1 = new A(); // 첫 번째 생성자 호출
        System.out.println();
        A a2 = new A(3); // 두 번째 생성자 호출 (생성자의 내부에서 첫 번째 생성자 호출)
    }
}

11. 변수의 초기화에 대한 설명으로 옳은 것은?

a. 필수적으로 수행되어야 하며, 초기화하지 않으면 컴파일 오류가 발생한다.

b. 선택적으로 수행할 수 있으며, 초기화하지 않으면 자동으로 기본값으로 초기화된다.

c. 생성자를 통해서만 가능하며, 직접 초기화할 수 없다.

d. 프로그래머가 직접 지정해야 하며, 자동으로 초기화되지 않는다.

정답 : b

 

12. 다음 중 상속의 장점으로 옳은 것은?

a. 코드의 재사용성을 감소시킨다.

b. 클래스 간의 관계를 강력하게 결합한다.

c. 코드의 가독성을 향상시킨다.

d. 클래스의 선언 순서를 제한한다.

정답 : c

 

해설 : 

상속의 목적

상속의 가장 큰 목적은 코드의 재사용입니다. 더 빠르고 유지보수가 쉽고, 중복이 적고, 통일성이 있는 코드를 작성하기 위해 상속을 사용합니다.

 

 

상속의 장점

1. 적은 양의 코드로 새로운 클래스를 작성 가능

2. 코드를 공통적으로 관리하기 때문에 여러 코드의 추가 및 변경이 용이

3. 중복을 제거해서 생산성과 쉬운 유지보수성에 크게 기여

 

13. 오버라이딩의 조건으로 옳은 것은?

a. 메서드의 이름이 같아야 한다.

b. 메서드의 리턴 타입이 같아야 한다.

c. 부모 클래스와 자식 클래스 사이에서 발생한다.

d. 메서드의 매개변수 개수와 타입이 같아야 한다.

정답 : a,b,c,d

해설 : 

오버라딩은 메서드를 새로 만들게 아니고 내용만을 새로 작성하는 것입니다. 메서드의 선언부는 부모와 완전히 일치해야 합니다. 그래서 다음과 같은 조건을 만족해야합니다.

 

1. 자식 클래스의 오버라이딩 하려는 메서드는 부모 클래스의 메서드와
- 이름이 같아야 한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.

2. 접근 제어자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- ex) 부모클래스 : public void xxx( ){ . . . }  , 자식클래스 : protectecd void xxx( ){ . . . } // 에러!!
- 
참고:  public -> protecd, -> (default), -> private 접근 범위가 좁아짐

3. 부모 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
- ex) 부모클래스 : void xxx ( ) throws IOException, SQLException { . . . }
       자식클래스:  void xxx ( ) throws Exception { . . . }
 
단순 개수 문제가 아님. Exception 은 모든 예외의 최고 부모이다. 가장 많은 개수의 예외를 던질 수 있다.

4. 인스턴스 메서드를 static 메서드 또는 그 반대로 변경할 수 없다.

 

 

14. 패키지에 대한 설명으로 옳은 것은?

a. 패키지는 클래스의 집합이다.

b. 패키지를 사용하지 않으면 클래스를 작성할 수 없다.

c. 패키지는 동일한 이름의 클래스를 구별하기 위해 사용된다.

d. 패키지는 파일 시스템의 디렉토리 구조와 연결된다.

 

정답 : a,b,c,d

해설 : 

  • (a) 패키지는 클래스의 집합입니다. 클래스 파일들을 논리적으로 그룹화하여 관리하기 위해 패키지를 사용합니다.
  • (c) 패키지는 동일한 이름의 클래스를 구별하기 위해 사용됩니다. 패키지를 통해 클래스의 전체적인 이름을 지정할 수 있으므로 서로 다른 패키지에 있는 동일한 이름의 클래스들을 구분할 수 있습니다.
  • (d) 패키지는 파일 시스템의 디렉토리 구조와 연결됩니다. 패키지는 폴더 구조와 유사하게 계층적으로 구성되며, 패키지명과 디렉토리 경로가 일치합니다. Java 컴파일러는 패키지의 계층 구조에 따라 클래스 파일을 저장하고 로드합니다.

 

15. final 제어자에 대한 설명으로 옳은 것은?

a. final로 선언된 클래스는 상속을 받을 수 없다.

b. final로 선언된 메서드는 오버라이딩을 할 수 없다.

c. final로 선언된 변수는 값이 변경될 수 없다.

d. final로 선언된 멤버는 접근 제어자를 사용할 수 없다.

 

정답 : a,b

해설 : final로 선언된 클래스는 상속을 받을 수 없습니다.

 

16. 다형성에 대한 설명으로 옳은 것은?

a. 다형성은 하나의 객체가 여러 개의 타입을 가질 수 있는 것을 말한다.

b. 다형성은 오버로딩과 동일한 개념이다.

c. 다형성은 상속과 관련이 없다.

d. 다형성은 컴파일 타임에 결정되는 개념이다.

 

정답 : a

다형성이란 하나의 객체나 메소드가 여러가지 다른 형태를 가질 수 있는 것을 말합니다. 

 

자바에서 다형성을 나타내는 것으로는, 오버라이딩 오버로딩 그리고 상속받은 객체의 참조변수 형변환등이 있다

 

 

17. 오버라이딩을 사용하여 아래 클래스들을 작성하고, 주어진 조건에 맞게 메서드를 오버라이딩하세요.

```java
class Student {
void makeSound() {
System.out.println("공부는 재밌을까?");
}
}

class SmartStudent extends Student {
// SmartStudent 클래스에 해당하는 메서드를 오버라이딩하여 작성하세요.

}

class LazyStudent extends Student {
// LazyStudent 클래스에 해당하는 메서드를 오버라이딩하여 작성하세요.

}

```

- SmartStudent 클래스의 `makeSound()` 메서드는 "공부는 재밌어!"을 출력해야 합니다.
- LazyStudent 클래스의 `makeSound()` 메서드는 "공부는 지겨워!"을 출력해야 합니다.

 

정답 

public class Student {
public Student() {
// makeSound();
}

void makeSound() {
System.out.println("공부는 재밌을까?");
}
}

public class SmartStudent extends Student {

public SmartStudent() {
makeSound();
}

@Override
void makeSound() {
System.out.println("공부는 재밌어!");
}
}
public class LazyStudent extends Student{

public LazyStudent() {
makeSound();
}

@Override
void makeSound() {
System.out.println("공부는 지겨워!");
}
}

main.java

SmartStudent ss = new SmartStudent();
LazyStudent ls = new LazyStudent();

 

 

 

18. 내부 클래스를 활용하여 아래 클래스를 작성하고, 주어진 조건에 맞게 작성하세요.

```java
class Outer {
private int x = 10;

// Inner 클래스를 작성하고, Outer 클래스의 x 값을 출력하는 printX() 메서드를 작성하세요.

}

```

- Inner 클래스는 Outer 클래스의 내부 클래스로 선언되어야 합니다.
- Inner 클래스에는 Outer 클래스의 x 값을 출력하는 `printX()` 메서드가 있어야 합니다.

정답 

 

Outer.java

public class Outer {

public Inner in;

public Outer() {
in = new Inner();

}

private int x = 10;

public class Inner {

public void printX(){
Outer ou = new Outer();
System.out.println(ou.x);
};
}

}

 

main.java

 

Outer ou = new Outer();
ou.in.printX();
19. 아래 인터페이스를 작성하고, 주어진 조건에 맞게 클래스를 구현하세요.

```java
// 여기에 인터페이스 Vehicle을 작성하세요.

// 여기에 Car 클래스를 작성하고, Vehicle 인터페이스를 구현하세요.

// 여기에 Bicycle 클래스를 작성하고, Vehicle 인터페이스를 구현하세요.

```

- Vehicle 인터페이스는 `start()` 메서드와 `stop()` 메서드를 가지고 있어야 합니다.
- Car 클래스는 Vehicle 인터페이스를 구현해야 합니다. `start()` 메서드는 "시동을 켭니다."를 출력하고, `stop()` 메서드는 "시동을 끕니다."를 출력해야 합니다.
- Bicycle 클래스는 Vehicle 인터페이스를 구현해야 합니다. `start()` 메서드는 "페달을 밟습니다."를 출력하고, `stop()` 메서드는 "페달을 놓습니다."를 출력해야 합니다.

 

정답 

Vehicle.java

public interface Vehicle {
void start();
void stop();

}

 

//
public class Car implements Vehicle{
@Override
public void start() {
System.out.println("시동을 켭니다.");
}

@Override
public void stop() {
System.out.println("시동을 끕니다.");
}
}

 

 


// 자전거
public class Bicycle implements Vehicle{
@Override
public void start() {
System.out.println("페달을 밟습니다.");
}

@Override
public void stop() {
System.out.println("페달을 놓습니다.");
}
}

 

main.java 

Car c = new Car();
Bicycle b = new Bicycle();
c.start();
b.start();
c.stop();
b.stop();

 

 

[ Java 객관식 문제 정답 ]

  1. (B) 3
  2. (A) el
  3. (A) 소수입니다.
  4. (A), (B)
    • 입력에 따라 다를 수 있습니다. 만약 입력한 나이가 18 이상이면 (A) 성인입니다. 그렇지 않으면 (B) 미성년자입니다.
  5. (A)
  6. (B)
    • 출력값은 55입니다. 반복문을 통해 1부터 10까지의 숫자를 sum 변수에 더하고, 마지막에 sum을 출력합니다.
  7. (a)
    • 객체 배열은 동일한 클래스의 객체들을 저장하기 위한 자료구조입니다.
  8. (b)
    • 지역 변수는 메서드 내에서 선언되며, 메서드 실행이 끝나면 소멸됩니다.
  9. (a)
    • 오버로딩의 조건은 메서드 이름은 같아야 하고, 매개변수의 개수와 순서는 달라야 합니다.
  10. (a), (b), (c)
    • (a) 다른 클래스의 생성자는 'new'
    • (b) 부모 클래스의 생성자는 'super'
    • (c) 같은 클래스의 다른 생성자를 호출하기 위한 키워드는 'this'
  11. (b)
    • 선택적으로 수행할 수 있으며, 초기화하지 않으면 자동으로 기본값으로 초기화됩니다.
  12. (c)
    • 상속은 코드의 가독성을 향상시킵니다.
  13. (a) (b) (c) (d)
  14. 다 맞는 말 입니다.
    • (a) 패키지는 클래스의 집합입니다. 클래스 파일들을 논리적으로 그룹화하여 관리하기 위해 패키지를 사용합니다.
    • (c) 패키지는 동일한 이름의 클래스를 구별하기 위해 사용됩니다. 패키지를 통해 클래스의 전체적인 이름을 지정할 수 있으므로 서로 다른 패키지에 있는 동일한 이름의 클래스들을 구분할 수 있습니다.
    • (d) 패키지는 파일 시스템의 디렉토리 구조와 연결됩니다. 패키지는 폴더 구조와 유사하게 계층적으로 구성되며, 패키지명과 디렉토리 경로가 일치합니다. Java 컴파일러는 패키지의 계층 구조에 따라 클래스 파일을 저장하고 로드합니다.
  15. (a) final로 선언된 클래스는 상속을 받을 수 없습니다.
  16. (a)
    • 다형성은 하나의 객체가 여러 개의 타입을 가질 수 있는 것을 말합니다. 객체는 자신이 속한 클래스의 타입 뿐만 아니라 부모 클래스의 타입으로도 사용될 수 있습니다. 다형성을 통해 같은 타입으로 여러 객체를 다룰 수 있으며, 이는 코드의 유연성과 재사용성을 높여줍니다.
```
class Student {
    void makeSound() {
        System.out.println("공부는 재밌을까?");
    }
}

class SmartStudent extends Student {
    @Override
    void makeSound() {
        System.out.println("공부는 재밌어!");
    }
}

class LazyStudent extends Student {
    @Override
    void makeSound() {
        System.out.println("공부는 지겨워!");
    }
}
```
```
class Outer {
    private int x = 10;

    class Inner {
        void printX() {
            System.out.println(x);
        }
    }

    public void outerMethod() {
        Inner inner = new Inner();
        inner.printX();
    }
}
```
728x90