07. 자바 날개 달기
07-1 패키지
- 패키지 : 비슷한 성격의 클래스들을 모아 놓은 자바의 디렉터리
1. 서브 패키지란?
- 서브 패키지 : 기본 패키지 안에 존재하는 하위 패키지
- 도트(.)을 이용하여 서브 패키지 표시
ex) house 패키지 안에 person이라는 서브 패키지를 만든다면 -> house.person 으로 표시
2. 패키지 사용하기
- import를 활용해 사용 가능
import house.person;
public class Sample {
public static void main(String[] args) {
person kim = new person();
}
}
※ (*)기호를 이용해 패키지 내의 모든 클래스 사용 가능
import house.*;
3. 패키지를 사용하는 이유
- 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이
- 패키지명이 다르면 동일한 클래스명이 있어도 충돌 없이 사용 가능
07-2 접근 제어자
- 변수나 메서드의 사용 권한 설정
1. private
- 해당 클래스 내에서만 접근 가능
public class Sample {
private String secret; //Sample 클래스 내에서만 접근 가능
private String getSecret() { //Sample 클래스 내에서만 접근 가능
return this.secret;
}
}
2. default
- 동일한 패키지 안에서만 접근 가능
- 접근 제어자를 별도로 설정하지 않는다면 default가 자동으로 설정
package house; // 패키지가 동일하다.
public class HousePark {
String lastname = "park"; //lastname은 default 접근제어자로 설정, 동일한 패키지 내에서 사용 가능
public static void main(String[] args) {
HouseKim kim = new HouseKim();
System.out.println(kim.lastname);
}
}
3. protected
- 동일 패키지의 클래스 또는 해당 클래스를 상속받은 클래스에서만 접근 가능
package house;
public class HousePark {
protected String lastname = "park";
}
package house.person;
import house.HousePark;
public class EungYongPark extends HousePark { // HousePark을 상속했다.
public static void main(String[] args) {
EungYongPark eyp = new EungYongPark();
System.out.println(eyp.lastname); // 상속한 클래스의 protected 변수는 접근이 가능하다.
}
}
4. public
- 어떤 클래스에서도 접근 가능
package house;
public class HousePark {
protected String lastname = "park";
public String info = "this is public message.";
}
import house.HousePark;
public class Sample {
public static void main(String[] args) {
HousePark housePark = new HousePark();
System.out.println(housePark.info); //info가 public이므로 접근 가능
}
}
07-3 스태틱
- 클래스에서 공유되는 변수나 메서드를 정의할 때 사용
1. static 변수
- 메모리 할당을 딱 한번만 하게 되어 메모리 적게 사용 가능
class Counter {
static int count = 0; //count값 static으로 설정
Counter() {
count++; //this.count로 설정 안하는 것이 좋다 (count는 더이상 객체변수가 아님)
System.out.println(this.count);
}
}
public class Sample {
public static void main(String[] args) {
Counter c1 = new Counter(); //1출력
Counter c2 = new Counter(); //2출력
}
}
2. static 메서드
- 객체 생성 없이도 클래스를 통해 메서드 직접 호출 가능
class Counter {
static int count = 0;
Counter() {
count++;
System.out.println(count);
}
public static int getCount() {
return count;
}
}
public class Sample {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.getCount()); // 스태틱 메서드는 클래스를 이용하여 호출
}
}
3. 싱글톤 패턴
- 클래스를 통해 생성할 수 있는 객체가 한 개만 되도록 만드는 것
class Singleton {
private static Singleton one; //Singleton클래스의 one 변수 static으로 설정
private Singleton() {
}
public static Singleton getInstance() { //객체 한번만 생성
if(one==null) { //one은 static변수이므로 한번 생성되면 null이 아님
one = new Singleton();
}
return one;
}
}
public class Sample {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2); // true 출력
}
}
객관식 문제
1. java.util 패키지에 포함된 클래스가 아닌 것은?
답 : D) File
2. 패키지 선언 키워드는 무엇인가요?
답 : A) package
3. 다음 중 사용자 정의 패키지를 사용하는 올바른 방법은?
답 : C) import 패키지명.*;
4. java.lang 패키지에 포함된 클래스는?
답 : D) 모두 해당
5. 다음 중 패키지와 관련 없는 것은?
답 : C) 접근 제어
6. import문 없이 사용할 수 있는 클래스는?
답 : A) java.lang.String
7. 다음 코드를 실행했을 때 출력 결과는 무엇인가요?
package com.example;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
답 : A) Hello, Java!
8. 다음 코드의 실행 결과는 무엇인가요?
package com.test;
public class Main {
public static void main(String[] args) {
int a = 10;
System.out.println(a + 5);
}
}
답 : B) 15
9. 다음 코드 실행 결과는 무엇인가요?
package com.demo;
public class Test {
public static void main(String[] args) {
String packageName = "com.demo";
System.out.println("Package: " + packageName);
}
}
답 : A) Package: com.demo
10. 다음 코드의 실행 결과는 무엇인가요?
package com.example.util;
public class Test {
public static void main(String[] args) {
System.out.println("Util Test");
}
}
답 : A) Util Test
11. 아래 코드의 실행 결과는 무엇인가요?
package invalid.package;
public class Test {
public static void main(String[] args) {
System.out.println("Invalid package!");
}
}
답 : B) 컴파일 오류 발생
12. 다음 중 private 접근 제어자의 특징은?
답 : A) 동일 클래스 내에서만 접근 가능
13. protected 접근 제어자는 어디서 접근 가능한가요?
답 : C) 동일 클래스, 동일 패키지, 하위 클래스
14. 접근 제어자가 없는 경우 기본 접근 수준은 무엇인가요?
답 : C) default (패키지 접근 수준)
15. 다음 중 public 접근 제어자의 설명으로 올바른 것은?
답 : C) 모든 클래스에서 접근 가능
16. 아래 코드에서 오류가 발생하는 이유는 무엇인가요?
package a;
public class A {
private int value = 10;
}
package b;
import a.A;
public class B {
public void printValue() {
A a = new A();
System.out.println(a.value);
}
}
답 : A) private 멤버는 동일 클래스에서만 접근 가능하기 때문
17. 다음 코드에서 컴파일 오류가 발생하는 경우는?
package package1;
public class ClassA {
int defaultVar = 5;
}
package package2;
import package1.ClassA;
public class ClassB {
public void printValue() {
ClassA a = new ClassA();
System.out.println(a.defaultVar);
}
}
답 : A) 패키지가 다르기 때문에 default 변수에 접근할 수 없다
18. public 클래스와 메서드는 어디에서 접근 가능한가요?
답 : C) 모든 클래스에서
19. 접근 제어자 중 가장 제한적인 것은 무엇인가요?
답 : B) private
20. 다음 코드의 실행 결과를 고르시오.
package test;
public class Main {
private int value = 10;
public static void main(String[] args) {
Main m = new Main();
System.out.println(m.value);
}
}
답 : A) 10
21. 다음 코드의 실행 결과를 고르시오.
package a;
public class A {
private void display() {
System.out.println("Private Method");
}
}
package b;
import a.A;
public class B {
public static void main(String[] args) {
A a = new A();
a.display();
}
}
답 : B) 컴파일 오류 발생
22. 다음 코드의 실행 결과를 고르시오
package mypackage;
public class MyClass {
protected void show() {
System.out.println("Protected Method");
}
}
package another;
import mypackage.MyClass;
public class Test extends MyClass {
public static void main(String[] args) {
Test t = new Test();
t.show();
}
}
답 : A) Protected Method
23. 다음 코드의 실행 결과를 고르시오
package p1;
public class A {
int defaultVar = 100;
}
package p2;
import p1.A;
public class B {
public static void main(String[] args) {
A a = new A();
System.out.println(a.defaultVar);
}
}
답 : B) 컴파일 오류 발생
24. 다음 코드의 실행 결과를 고르시오
package test;
public class Main {
public static void main(String[] args) {
Helper.display();
}
}
class Helper {
static void display() {
System.out.println("Helper Method");
}
}
답 : A) Helper Method
25. static 키워드의 주요 특징은 무엇인가요?
답 : B) 클래스 로드 시점에 메모리에 할당된다
26. static 키워드가 사용될 수 없는 곳은?
답 : B) 인스턴스 변수
27. 다음 중 static 키워드로 선언된 메서드의 특징은?
답 : B) 클래스 이름을 통해 호출할 수 있다
28. 다음 코드의 출력 결과는?
public class Test {
static int count = 0;
public Test() {
count++;
}
public static void main(String[] args) {
new Test();
new Test();
System.out.println(count);
}
}
답 : C) 2
29. static 메서드에서 사용할 수 없는 것은?
답 : A) this 키워드
30. static 블록이 여러 개인 경우 실행 순서는?
답 : A) 선언된 순서대로 실행된다
31. 다음 코드에서 컴파일 오류가 발생하는 이유는?
public class Test {
static void print() {
System.out.println(value);
}
int value = 10;
}
답 : A) static 메서드에서 인스턴스 변수를 사용할 수 없다
32. 다음 중 static 키워드의 올바른 사용 예는?
답 : C) 공통 데이터를 여러 객체가 공유해야 할 때
33. 다음 코드의 실행 결과를 고르시오
public class Test {
static int count = 0;
static {
count = 10;
}
public static void main(String[] args) {
System.out.println(count);
}
}
답 : B) 10
34. 다음 코드의 실행 결과를 고르시오
public class Test {
static void display() {
System.out.println("Static Method");
}
public static void main(String[] args) {
Test t = null;
t.display();
}
}
답 : A) Static Method
35. 다음 코드의 실행 결과를 고르시오
public class Test {
static int count;
static {
count = 20;
}
public static void main(String[] args) {
count += 5;
System.out.println(count);
}
}
답 : C) 25
36. 다음 코드의 실행 결과를 고르시오
public class Test {
static int x = 10;
public static void main(String[] args) {
int x = 20;
System.out.println(x);
System.out.println(Test.x);
}
}
답 : B) 20, 10
코딩 테스트
https://www.acmicpc.net/problem/10809 - 브1
https://www.acmicpc.net/problem/3052 - 브2
'WINK-(Web & App) > JAVA 스터디' 카테고리의 다른 글
[2024-2 Java 스터디] 이민형 #6주차 (7장) (0) | 2024.11.22 |
---|---|
[2024-2 Java 스터디] 김재승 #6주차 (0) | 2024.11.22 |
[2024-2 Java 스터디] 김지수 #6주차 (0) | 2024.11.21 |
[2024-2 Java 스터디] 이가인 #6주차 (1) | 2024.11.21 |
[2024-2 Java 스터디] 김민서 #6주차 (1) | 2024.11.20 |