Java/문제풀이

Java 문제 풀이 1

pakms980319 2024. 3. 6. 13:42

1. 객체와 클래스에 대한 설명으로 틀린 것은 무엇인가?

1) 클래스는 객체를 생성하기 위한 설계도(청사진)와 같은 것이다.

2) new 연산자로 클래스의 생성자를 호출함으로써 객체가 생성된다.

3) 하나의 클래스로 하나의 객체만 생성할 수 있다.

4) 객체는 클래스의 인스턴스이다.

 

답: 3

풀이: 하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있다


2. 클래스의 구성 멤버가 아닌 것은 무엇인가?

1) 필드 (field)

2) 생성자 (constructor)

3) 메서드 (method)

4) 로컬 변수 (local variable)

 

답: 4

풀이: 로컬변수는 블록 내부에 선언된 변수이다


3. 필드, 생성자, 메서드에 대한 설명으로 틀린 것은 무엇인가?

1) 필드는 객체의 데이터를 저장한다.

2) 생성자는 객체의 초기화를 담당한다.

3) 메서드는 객체의 동작 부분으로, 실행 코드를 가지고 있는 블록이다.

4) 클래스는 반드시 필드와 메서드를 가져야 한다.

 

답: 4

풀이: 클래스의 구성 멤버들은 생략되거나 복수 개가 작성될 수 있다


4. 필드에 대한 설명으로 틀린 것은 무엇인가?

1) 필드는 메서드에서 사용할 수 있다.

2) 인스턴스 필드 초기화는 생성자에서 할 수 있다.

3) 필드는 반드시 생성자 선언 전에 선언되어야 한다.

4) 필드는 초기값을 주지 않더라도 기본값으로 자동 초기화 된다.

 

답: 3

풀이: 필드 선언은 클래스 중괄호 {} 블록 어디서든 존재할 수 있다. 생성자 선언과 메서드 선언의 앞과 뒤 어떤 곳에서도 필드 선언이 가능하다.


5. 생성자에 대한 설명으로 틀린 것은 무엇인가?

1) 객체를 생성하려면 생성자 호출이 반드시 필요한 것은 아니다.

2) 생성자는 다른 생성자를 호출하기 위해 this()를 사용할 수 있다.

3) 생성자가 선언되지 않으면 컴파일러가 기본 생성자를 추가한다.

4) 외부에서 객체를 생성할 수 없도록 생성자에 private 접근 제한자를 붙일 수 있다.

 

답: 1

풀이: 생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없다. 만약 생성자가 성공적으로 실행되지 않고 예외(에러)가 발생했다면 객체는 생성되지 않는다.


6. 메서드에 대한 설명으로 틀린 것은 무엇인가?

1) 리턴값이 없는 메서드는 리턴 타입을 void로 해야 한다.

2) 리턴 타입이 있는 메서드는 리턴값을 지정하기 위해 반드시 return문이 있어야 한다.

3) 매개값의 수를 모를 경우 "..."을 이용해서 매개 변수를 선언 할 수 있다.

4) 메서드의 이름은 중복해서 선언할 수 없다.

 

답: 4

풀이: 메서드 오버로딩: 클래스 내에 같은 이름의 메서드를 여러 개 선언하는 개념


7. 메서드 오버로딩에 대한 설명으로 틀린 것은?

1) 동일한 이름의 메서드를 여러 개 선언하는 것을 말한다.

2) 반드시 리턴 타입이 달라야 한다.

3) 매개 변수의 타입, 수 순서를 다르게 선언해야 한다.

4) 매개값의 타입 및 수에 따라 호출될 메서드가 선택된다.

 

답: 2

풀이: 메서드 오버로딩의 조건

매개 변수의 타입, 개수, 순서 중 하나 이상이 달라야 한다. (리턴 타입은 고려 대상이 아니다)


8. 인스턴스 멤버와 정적 멤버에 대한 설명으로 틀린 것은 무엇인가?

1) 정적 멤버는 static으로 선언된 필드와 메서드를 말한다.

2) 인스턴스 필드는 생성자 및 정적 블록에서 초기화 될 수 있다.

3) 정적 필드와 정적 메서드는 객체 생성 없이 클래스를 통해 접근 할 수 있다.

4) 인스턴스 필드와 메서드는 객체를 생성하고 사용해야 한다.

 

답: 2

풀이: 객체가 없어도 실행된다는 특징 때문에 정적 메서드와 정적 블록 내부에 인스턴스 필드나 인스턴스 메서드를 사용할 수 없다. 또한 this 키워드도 사용이 불가능하다.


9. final 필드와 상수(static final)에 대한 설명으로 틀린 것은 무엇인가?

1) final 필드와 상수는 초기값이 저장되면 값을 변경할 수 없다.

2) final 필드와 상수는 생성자에서 초기화 될 수 있다.

3) 상수의 이름은 대문자로 작성하는 것이 관례이다.

4) 상수는 객체 생성 없이 클래스를 통해 사용할 수 있다.

 

답: 2

풀이: final 필드는 객체마다 저장되고, 생성자의 매개 값을 통해서 여러 가지 값을 가질 수 있다

static final 필드는 객체마다 저장되지 않고, 클래스에만 포함된다. 그리고 한 번 초기값이 저장되면 변경할 수 없다. 생성자를 통해서 값을 지정하는 것이 아니라 선언과 동시에 초기값을 지정해야 한다.


10. 패키지에 대한 설명으로 틀린 것은 무엇인가?

1) 패키지는 클래스들을 그룹화시키는 기능을 한다.

2) 클래스가 패키지에 소속되려면 패키지 선언을 반드시 해야 한다.

3) import문은 다른 패키지의 클래스를 사용할 때 필요하다.

4) mycompany 패키지에 소속된 클래스는 yourcompany에 옮겨 놓아도 동작한다.

 

답: 4

풀이: 클래스만 따로 복사해서 다른 곳으로 이동하면 클래스는 사용할 수 없다. (패키지 선언)


11. 접근 제한에 대한 설명으로 틀린 것은 무엇인가?

1) 접근 제한자는 클래스, 필드, 생성자, 메서드의 사용을 제한한다.

2) public 접근 제한은 아무런 제한 없이 해당 요소를 사용할 수 있게 한다.

3) default 접근 제한은 해당 클래스 내부에서만 사용을 허가한다.

4) 외부에서 접근하지 못하도록 하려면 private 접근 제한을 해야한다.

 

답: 3

풀이: default 접근 제한자는 같은 패키지에 소속된 클래스에서만 사용할 수 있는 멤버를 만든다.


12. 다음 클래스에서 해당 멤버가 필드, 생성자, 메서드 중 어떤 것인지 빈칸을 채워라.

 

답:

(1) 필드 (2) 생성자 (3) 메서드


13. 현실 세계의 회원을 Member 클래스로 모델링하려고 한다. 회원의 데이터로는 이름, 아이디, 패스워드, 나이가 있다. 이 데이터들을 가지는 Member 클래스를 선언해보아라.

데이터 이름 필드 이름 타입
이름 name 문자열
아이디 id 문자열
패스워드 password 문자열
나이 age 정수

 

답:

public class Member {
    String name;
    String id;
    String password;

    int age;
}

14. 위에서 작성한 Member 클래스에서 생성자를 추가하려고 한다. 다음과 같이 Member 객체를 생성할 때 name 필드와 id 필드를 외부에서 받은 값으로 초기화하려면 생성자를 어떻게 선언해야 하는가?

  • Member user1 = new Member("홍길동", "hong");
  • Member user2 = new Member("강자바", "java");

답:

public class Member {
    ... (멤버 변수 선언 생략)
    public Member(String name, String id) {
        this.name = name;
        this.id = id;
    }
}

15. MemberService 클래스에 login() 메서드와 logout() 메서드를 선언하려고 한다. login() 메서드를 호출할 때에는 매개 값으로 id와 password를 제공하고, logout 메서드는 id만 매개값으로 제공한다. MemberService 클래스와 login(), logout() 메서드를 선언 해보아라.

  • login() 메서드는 매개값 id가 "hong", 매개값 password가 "12345"일 경우에만 true로 리턴하고 그 이외의 값일 경우에는 false를 리턴하도록 하라
  • logout() 메서드의 내용은 "로그아웃 되었습니다."가 출력 되도록 하라.
리턴 타입 메서드 이름 매개 변수(타입)
boolean login id(String), password(String)
void logout id(String)

 

 

답:


16. PrinterExample 클래스에서 Printer 객체를 생성하고 println() 메서드를 호출해서 매개값을 콘솔에 출력하려고 한다. println() 메서드의 매개값으로는 int, boolean, double, String 값을 줄 수 있다. Printer 클래스에서 println() 메서드를 정의해보아라.

답:


17. 16번 문제에서는 Printer 객체를 생성하고 println() 메서드를 생성했다. Printer 객체를 생성하지 않고 PrinterExample 클래스에서 다음과 같이 호출하려면 Printer 클래스르 어떻게 수정해야하는가?

 

답:


18. ShopService 객체를 싱글톤으로 만들고 싶다. ShopServiceExample 클래스에서 ShopService의 getInstance() 메서드로 싱글톤을 얻을 수 있도록 ShopService 클래스를 작성해보아라.

 

답:


19. 은행 계좌 객체인 Account 객체는 잔고(balance) 필드를 가지고 있다. balance 필드는 음수값이 될 수 없고, 최대 백만원까지만 저장할 수 있다. 외부에서 balance 필드를 마음대로 변경하지 못하도록 하고, 0 <= balance <= 1000000 범위의 값만 가질 수 있도록 Account 클래스를 작성해보아라.

 

답:


20. 다음은 키보드로부터 계좌 정보를 입력받아서, 계좌를 관리하는 프로그램이다. 실행 결과를 보고, 알맞게 BankApplication 클래스의 메서드를 작성해보아라.

Account 클래스

 

구현 코드

package Ch06_Ex;


import java.util.Scanner;


public class BankApplication {
    private static Account[] accountArray = new Account[100];
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        boolean run = true;
   
        while(run) {
            System.out.println("---------------------------------------------");
            System.out.println("1. 계좌생성 | 2. 계좌목록 | 3. 예금 | 4. 출금 | 5. 종료");
            System.out.println("---------------------------------------------");

            int selectNo = scanner.nextInt();

            switch(selectNo) {
            case 1:
                createAccount();
                break;
            case 2:
                accountList();
                break;
            case 3:
                deposit();
                break;
            case 4:
                withdraw();
                break;
            default:
                run = false;
            }
       }
       System.out.println("프로그램 종료");
    }

    // 1) 계좌 생성
    private static void createAccount() {
        System.out.println("================");
        System.out.println("계좌생성");
        System.out.println("================");
   
        System.out.print("계좌번호: ");;
        String ano = scanner.next();

        System.out.print("계좌주: ");
        String owner = scanner.next();

        System.out.println("초기 입금액: ");
        int balance = scanner.nextInt();
   
        Account account = new Account(ano, owner, balance);

        for (int i = 0; i < accountArray.length; i++) {
            if(accountArray[i] == null) {
                accountArray[i] = account;
                System.out.println("결과: 계좌가 생성되었습니다.");
                break;
            }
        }
    }

    // 2) 계좌 목록 조회
    private static void accountList() {
        System.out.println("================");
        System.out.println("계좌 목록");
        System.out.println("================");

        for (int i = 0; i < accountArray.length; i++) {
            if (accountArray[i] == null) break;
            System.out.println(accountArray[i].getAno() + "\t" + accountArray[i].getOwner() + "\t" + accountArray[i].getBalance());
        }
    }

// 3. 예금
    private static void deposit() {
        System.out.println("================");
        System.out.println("예금");
        System.out.println("================");

        System.out.print("계좌번호: ");
        String ano = scanner.next();
       
        System.out.print("예금액: ");
        int balance = scanner.nextInt();
   
        Account account = findAccount(ano);

        if (account == null) {
            System.out.println("결과: 계좌가 존재하지 않습니다.");
            return;
        }

        account.setBalance(account.getBalance() + balance);
        System.out.println("결과: 예금이 성공되었습니다.");
    }

    // 4. 출금
    private static void withdraw() {
        System.out.println("================");
        System.out.println("출금");
        System.out.println("================");

        System.out.print("계좌번호: ");
        String ano = scanner.next();

        System.out.print("출금액: ");
        int balance = scanner.nextInt();

        Account account = findAccount(ano);

        if (account == null) {
            System.out.println("결과: 계좌가 존재하지 않습니다.");
            return;
        }

        if (account.getBalance() < balance) {
            System.out.println("예금액보다 많은 금액을 출금할 수 없습니다.");
            return;
        }

        account.setBalance(account.getBalance() - balance);
        System.out.println("결과: 출금이 성공되었습니다.");
    }

    // 5. Account 배열에서 ano와 동일한 Account 객체 찾기
    private static Account findAccount(String ano) {
        Account account = null;
       
        for (int i = 0; i < accountArray.length; i++) {
            if(accountArray[i] == null) break;
            else if (accountArray[i].getAno().equals(ano)) {
                account = accountArray[i];
                break;
            }
        }

        return account;
    }
}

 


출처

 

https://scksk.tistory.com/6

 

이것이 자바다 확인문제 (6장 클래스)

1. 객체와 클래스에 대한 설명으로 틀린 것은 무엇입니까?1) 클래스는 객체를 생성하기 위한 설계도(청사진)와 같은 것이다.2) new 연산자로 클래스의 생성자를 호출함으로써 객체가 생성된다.3)

scksk.tistory.com

https://security-nanglam.tistory.com/213

 

[명품 JAVA] 4장 실습문제 (클래스와 객체)

[공지] 코딩, 솔루션, 포스팅 주제 관련 [4장 1번] 자바 클래스를 작성하는 연습을 해보자. 다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.public static void main(Strin

security-nanglam.tistory.com

https://iu-corner.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%97%B0%EC%8A%B5-%EB%AC%B8%EC%A0%9C-%EB%AA%A8%EC%9D%8C-1/

 

JAVA (자바) - 클래스 연습 문제 모음 - (1)

JAVA (자바) - 클래스 연습 문제 모음 - (1) 문제 1 - 다음을 만족하는 Student 클래스를 작성하시오. · String형의 학과와 정수형의 학번을 필드로 선언 · Student 클래스의 main() 메소드에서 Student 객체를

iu-corner.tistory.com

 

'Java > 문제풀이' 카테고리의 다른 글

Java 문제 풀이 Class  (0) 2024.03.12
Java Up/Down Casting 문제 1  (0) 2024.03.11
Java 상속 문제풀이 1  (0) 2024.03.08
Java 문제 풀이 2  (1) 2024.03.07
0. 변수 문제풀이  (0) 2024.02.28