목차
- 패키지
- 접근 제어자
- static
자바에서 package , access modifiers , static 에 대해 알아보자
1. 패키지(Package)
패키지란?
패키지는 자바 클래스와 인터페이스를 묶어 체계적으로 관리하기 위한 방법임.
디렉토리 구조와 유사하게 구성되어 코드의 재사용성과 가독성을 높이는 데 도움을 줍니다.
패키지 선언 방법
패키지는 파일의 최상단에서 package 키워드로 선언합니다.
package com.example.myapp;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
패키지 사용 예제
다른 패키지에 있는 클래스를 사용하려면 import 키워드를 사용함
package com.example.util;
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
package com.example.main;
import com.example.util.MathUtils;
public class App {
public static void main(String[] args) {
int result = MathUtils.add(5, 3);
System.out.println("The sum is: " + result);
}
}
>> import로 com.example.util 패키지에 속하는 클래스인 MathUtils를 가져와서 클래스 이름을 통해 메서드 구현하고있음
장점
- 클래스 관리: 관련 클래스들을 그룹화하여 관리할 수 있음
- 충돌 방지: 동일한 클래스 이름이 있어도 다른 패키지에 있다면 구분됨
- 재사용성: 공통적으로 사용되는 유틸리티 클래스들을 별도 패키지에 두어 재사용 가능
2. 접근 제어자(Access Modifiers)
접근 제어자란?
접근 제어자는 클래스, 메서드, 변수의 접근 범위를 설정하며 네 가지 제어자가 존재함
접근 제어자 | 같은 클래스 | 같은 패키지 | 자식 클래스 | 다른 패키지 |
public | ✅ | ✅ | ✅ | ✅ |
protected | ✅ | ✅ | ✅ | ❌ |
(default) | ✅ | ✅ | ❌ | ❌ |
private | ✅ | ❌ | ❌ | ❌ |
접근 제어자의 활용
- public: 모든 클래스에서 사용 가능.
- protected: 상속받은 클래스에서 사용하거나 같은 패키지에서 접근 가능.
- default: 같은 패키지 내에서만 접근 가능.
- private: 같은 클래스 내에서만 접근 가능.
3. static 키워드
static이란?
static은 클래스 수준에서 변수를 선언하거나 메서드를 정의할 때 사용되며 객체를 생성하지 않고도 접근할 수 있는 특징이 있음
static의 특징
- 클래스에 고정된 멤버.
- 모든 객체가 공유하는 값.
- 객체 생성 없이 접근 가능.
1. java.util 패키지에 포함된 클래스가 아닌 것은?
- A) ArrayList
- B) HashMap
- C) Scanner
- D) File
정답: D) File
해설: File 클래스는 java.io 패키지에 포함되어 있습니다. 나머지 클래스는 모두 java.util 패키지에 속합니다.
2. 패키지 선언 키워드는 무엇인가요?
- A) package
- B) import
- C) include
- D) namespace
정답: A) package
해설: 패키지는 package 키워드로 선언하며, 자바 소스 파일의 최상단에 위치합니다.
3. 다음 중 사용자 정의 패키지를 사용하는 올바른 방법은?
- A) include 패키지명;
- B) package 패키지명;
- C) import 패키지명.*;
- D) namespace 패키지명.*;
정답: C) import 패키지명.*;
해설: 패키지의 클래스를 사용하려면 import를 사용해야 합니다. *는 해당 패키지의 모든 클래스를 가져옵니다.
4. java.lang 패키지에 포함된 클래스는?
- A) String
- B) Math
- C) System
- D) 모두 해당
정답: D) 모두 해당
해설: java.lang 패키지는 기본적으로 모든 자바 프로그램에 포함되며, String, Math, System 클래스가 속합니다.
5. 다음 중 패키지와 관련 없는 것은?
- A) 클래스 간의 충돌 방지
- B) 클래스 조직화
- C) 접근 제어
- D) 네임스페이스 제공
정답: C) 접근 제어
해설: 패키지는 클래스의 조직화와 네임스페이스 제공, 클래스 충돌 방지와 관련이 있습니다. 접근 제어는 접근 제어자와 관련 있습니다.
6. import 문 없이 사용할 수 있는 클래스는?
- A) java.lang.String
- B) java.util.Scanner
- C) java.io.File
- D) java.net.Socket
정답: A) java.lang.String
해설: java.lang 패키지는 기본적으로 임포트 없이 사용할 수 있습니다.
7. 다음 코드를 실행했을 때 출력 결과는 무엇인가요?
- A) Hello, Java!
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: A) Hello, Java!
해설: 코드에는 오류가 없으며, "Hello, Java!"가 출력됩니다.
8. 다음 코드의 실행 결과는 무엇인가요?
- A) 10
- B) 15
- C) 컴파일 오류 발생
- D) 런타임 오류 발생
정답: B) 15
해설: 변수 a는 10으로 초기화되며, a + 5의 결과는 15입니다.
9. 다음 코드 실행 결과는 무엇인가요?
- A) Package: com.demo
- B) PackageName: com.demo
- C) 컴파일 오류 발생
- D) 런타임 오류 발생
정답: A) Package: com.demo
해설: 코드에는 오류가 없으며, 문자열 "Package: com.demo"가 출력됩니다.
10. 다음 코드의 실행 결과는 무엇인가요?
- A) Util Test
- B) util test
- C) 컴파일 오류 발생
- D) 아무것도 출력되지 않음
정답: A) Util Test
해설: 코드가 정상적으로 실행되며 "Util Test"가 출력됩니다.
11. 아래 코드의 실행 결과는 무엇인가요?
- A) Invalid package!
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: B) 컴파일 오류 발생
해설: 패키지 이름에 점(.)이 포함될 수 있으나 디렉토리 구조와 맞지 않으면 컴파일 오류가 발생합니다.
12. 다음 중 private 접근 제어자의 특징은?
- A) 동일 클래스 내에서만 접근 가능
- B) 동일 패키지 내에서만 접근 가능
- C) 상속받은 클래스에서도 접근 가능
- D) 모든 클래스에서 접근 가능
정답: A) 동일 클래스 내에서만 접근 가능
해설: private 접근 제어자는 선언된 클래스 내에서만 사용할 수 있습니다.
여기까지가 진행 가능한 부분입니다. 추가적으로 남은 문제에 대한 정리도 곧 작성하겠습니다.
13. protected 접근 제어자는 어디서 접근 가능한가요?
- A) 동일 클래스와 동일 패키지
- B) 동일 클래스와 하위 클래스
- C) 동일 클래스, 동일 패키지, 하위 클래스
- D) 모든 클래스
정답: C) 동일 클래스, 동일 패키지, 하위 클래스
해설: protected 접근 제어자는 동일 클래스뿐 아니라 동일 패키지, 그리고 하위 클래스에서 접근 가능합니다.
14. 접근 제어자가 없는 경우 기본 접근 수준은 무엇인가요?
- A) private
- B) protected
- C) default (패키지 접근 수준)
- D) public
정답: C) default (패키지 접근 수준)
해설: 접근 제어자를 명시하지 않으면 기본적으로 default 접근 수준이 설정되며, 동일 패키지 내에서만 접근 가능합니다.
15. 다음 중 public 접근 제어자의 설명으로 올바른 것은?
- A) 동일 클래스에서만 접근 가능
- B) 동일 패키지와 하위 클래스에서만 접근 가능
- C) 모든 클래스에서 접근 가능
- D) 동일 클래스와 동일 패키지에서만 접근 가능
정답: C) 모든 클래스에서 접근 가능
해설: public 접근 제어자는 모든 클래스에서 접근 가능하며, 패키지 및 클래스 제한이 없습니다.
16. 아래 코드에서 오류가 발생하는 이유는 무엇인가요?
- A) private 멤버는 동일 클래스에서만 접근 가능하기 때문
- B) 클래스 A가 public이 아니기 때문
- C) package 접근 수준의 제한 때문
- D) 컴파일러가 값을 초기화하지 않았기 때문
정답: A) private 멤버는 동일 클래스에서만 접근 가능하기 때문
해설: 클래스 A의 value 필드는 private으로 선언되었으므로 다른 클래스에서는 접근할 수 없습니다.
17. 다음 코드에서 컴파일 오류가 발생하는 경우는?
- A) 패키지가 다르기 때문에 default 변수에 접근할 수 없다
- B) 클래스 A가 public이 아니기 때문
- C) default 접근 제어자는 하위 클래스에서만 접근 가능
- D) 컴파일 오류가 발생하지 않는다
정답: A) 패키지가 다르기 때문에 default 변수에 접근할 수 없다
해설: default 접근 수준은 동일 패키지 내에서만 접근 가능하므로 다른 패키지에서는 접근할 수 없습니다.
18. public 클래스와 메서드는 어디에서 접근 가능한가요?
- A) 동일 패키지에서만
- B) 상속받은 클래스에서만
- C) 모든 클래스에서
- D) 동일 클래스 내에서만
정답: C) 모든 클래스에서
해설: public 클래스와 메서드는 패키지나 클래스에 관계없이 모든 곳에서 접근 가능합니다.
19. 접근 제어자 중 가장 제한적인 것은 무엇인가요?
- A) public
- B) private
- C) protected
- D) default
정답: B) private
해설: private 접근 제어자는 동일 클래스 내에서만 접근 가능하며, 가장 제한적입니다.
20. 다음 코드의 실행 결과를 고르시오.
- A) 10
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: A) 10
해설: value는 private이지만, 동일 클래스 내에서는 접근 가능하므로 정상 출력됩니다.
21. 아래 코드에서 컴파일 오류가 발생하는 이유는?
- A) Private Method
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: B) 컴파일 오류 발생
해설: display() 메서드는 private으로 선언되어 있어 다른 클래스에서 호출할 수 없습니다.
22. 다음 코드의 실행 결과를 고르시오.
- A) Protected Method
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: A) Protected Method
해설: show() 메서드는 protected로 선언되었으므로 하위 클래스인 Test에서 접근 가능합니다.
23. 다음 코드에서 컴파일 오류가 발생하는 이유는?
- A) 100
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: B) 컴파일 오류 발생
해설: defaultVar는 default 접근 수준으로 선언되었으며, 다른 패키지에서는 접근할 수 없습니다.
이와 같은 방식으로 나머지 문제도 순차적으로 해설을 작성하겠습니다.
24. 다음 코드의 실행 결과를 고르시오.
- A) Helper Method
- B) 컴파일 오류 발생
- C) 런타임 오류 발생
- D) 아무것도 출력되지 않음
정답: A) Helper Method
해설: Helper.display()는 정적 메서드 호출로 정상적으로 실행되며, "Helper Method"가 출력됩니다.
25. static 키워드의 주요 특징은 무엇인가요?
- A) 클래스와 인스턴스에서 모두 접근 가능하다
- B) 클래스 로드 시점에 메모리에 할당된다
- C) 객체 생성 없이 사용 불가능하다
- D) 쓰레드마다 별도로 메모리에 할당된다
정답: B) 클래스 로드 시점에 메모리에 할당된다
해설: static 키워드는 클래스 로드 시점에 메모리에 할당되며, 객체 생성 없이도 사용 가능합니다.
26. static 키워드가 사용될 수 없는 곳은?
- A) 클래스 변수
- B) 인스턴스 변수
- C) 메서드
- D) 클래스 내부 블록
정답: B) 인스턴스 변수
해설: static은 클래스 수준에서 공유되며, 인스턴스 변수에는 사용할 수 없습니다.
27. 다음 중 static 키워드로 선언된 메서드의 특징은?
- A) 인스턴스 변수를 참조할 수 있다
- B) 클래스 이름을 통해 호출할 수 있다
- C) this 키워드를 사용할 수 있다
- D) 상속할 수 없다
정답: B) 클래스 이름을 통해 호출할 수 있다
해설: static 메서드는 클래스 이름을 통해 호출할 수 있지만, 인스턴스 변수를 참조하거나 this를 사용할 수 없습니다.
28. 다음 코드의 출력 결과는?
- A) 0
- B) 1
- C) 2
- D) 컴파일 오류
정답: C) 2
해설: count는 정적 변수로 모든 객체가 공유합니다. 객체 두 개가 생성되었으므로 count는 2가 됩니다.
29. static 메서드에서 사용할 수 없는 것은?
- A) this 키워드
- B) static 변수
- C) 클래스 이름
- D) static 메서드
정답: A) this 키워드
해설: static 메서드는 인스턴스와 독립적이기 때문에 this를 사용할 수 없습니다.
30. static 블록이 여러 개인 경우 실행 순서는?
- A) 선언된 순서대로 실행된다
- B) 역순으로 실행된다
- C) JVM이 임의로 결정한다
- D) 첫 번째 블록만 실행된다
정답: A) 선언된 순서대로 실행된다
해설: static 블록은 클래스 로드 시 선언된 순서대로 실행됩니다.
31. 다음 코드에서 컴파일 오류가 발생하는 이유는?
- A) static 메서드에서 인스턴스 변수를 사용할 수 없다
- B) value가 초기화되지 않았다
- C) static 메서드는 호출할 수 없다
- D) 변수 이름 충돌이 발생했다
정답: A) static 메서드에서 인스턴스 변수를 사용할 수 없다
해설: value는 인스턴스 변수로 static 메서드에서 직접 사용할 수 없습니다.
32. 다음 중 static 키워드의 올바른 사용 예는?
- A) 매번 새로운 객체를 생성해야 할 때
- B) 특정 인스턴스에 데이터를 유지해야 할 때
- C) 공통 데이터를 여러 객체가 공유해야 할 때
- D) 메모리 할당을 동적으로 조정해야 할 때
정답: C) 공통 데이터를 여러 객체가 공유해야 할 때
해설: static 키워드는 모든 객체가 공유해야 하는 데이터를 선언할 때 사용합니다.
33. 다음 코드의 실행 결과를 고르시오.
- A) 0
- B) 10
- C) 컴파일 오류 발생
- D) 런타임 오류 발생
정답: B) 10
해설: static 블록에서 count를 10으로 초기화했으므로 출력 값은 10입니다.
34. 다음 코드의 실행 결과를 고르시오.
- A) Static Method
- B) NullPointerException 발생
- C) 컴파일 오류 발생
- D) 아무것도 출력되지 않음
정답: A) Static Method
해설: 정적 메서드는 클래스에 종속되므로 객체 참조가 null이어도 호출 가능합니다.
35. 다음 코드의 실행 결과를 고르시오.
- A) 0
- B) 5
- C) 25
- D) 컴파일 오류 발생
정답: C) 25
해설: count는 static 블록에서 20으로 초기화되었으며, += 5 연산으로 25가 됩니다.
36. 다음 코드의 실행 결과를 고르시오.
- A) 10, 10
- B) 20, 10
- C) 20, 20
- D) 컴파일 오류 발생
정답: B) 20, 10
해설: 지역 변수 x는 main 메서드 내에서 우선됩니다. Test.x는 클래스 변수인 10을 참조합니다.
코딩테스트 1번
import java.util.Scanner;
public class b_10809 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String userInput = sc.nextLine();
for(char i = 'a'; i<='z'; i++){
System.out.print(userInput.indexOf(i)+" ");
}
}
}
>> userInput에 입력값을 받고 입력값의 indexOf 메서드를 통해 해당 인덱스에서의 인풋값을 'a' 부터 'z'까지 돌아가며 출력한다.
코딩테스트 2번
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashSet<Integer> remainderSet = new HashSet<>();
for (int i = 0; i < 10; i++) {
int num = sc.nextInt();
remainderSet.add(num % 42);
}
System.out.println(remainderSet.size());
sc.close();
}
}
>> 중복을 허용하지 않는 HashSet 을 이용했다. num에 입력값을 받고 그 입력값을 42로 나눈 나머지를 HashSet에 추가하였고 그 값의 크기를 , 즉 개수를 출력하게 했다.
'WINK-(Web & App) > JAVA 스터디' 카테고리의 다른 글
[2024-2 Java 스터디] 김지나 #7주차 (0) | 2024.11.27 |
---|---|
[2024-2 Java 스터디] 이민형 #6주차 (7장) (0) | 2024.11.22 |
[2024-2 Java 스터디] 김태일 #6주차 (0) | 2024.11.21 |
[2024-2 Java 스터디] 김지수 #6주차 (0) | 2024.11.21 |
[2024-2 Java 스터디] 이가인 #6주차 (1) | 2024.11.21 |