패키지
패키지 : 비슷한 성격의 클래스들을 모아 놓은 자바의 디렉터리
서브 패키지 : 기본 패키지 안에 존재하는 하위 패키지 (도트(.)를 이용하여 표시)
패키지 사용하기
import house.HouseKim; //import 사용
public class Sample {
public static void main(String[] args) {
HouseKim kim = new HouseKim();
}
}
import house.*; //house 패키지 내의 모든 클래스 사용
public class Sample {
public static void main(String[] args) {
HouseKim kim = new HouseKim();
HousePark park = new HousePark();
}
}
-> 클래스의 분류가 용이, 패키지가 다르다면 동일한 클래스명 사용 가능
접근 제어자
private < defalut < protected < public 순으로 보다 많은 접근 허용
1. private
private이 붙은 변수나 메서드는 해당 클래스 안에서만 접근 가능
2. default
접근 제어자를 별도로 설정하지 않는다면 default가 자동으로 설정, 동일한 패키지 안에서만 접근 가능
3. protected
protected가 붙은 변수나 메서드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 클래스에서만 접근 가능
4. public
public 접근 제어자가 붙은 변수나 메서드는 어떤 클래스에서도 접근 가능
스태틱
static 변수 - 메모리 할당을 딱 한 번만 하게 된다, 값을 공유할 수 있다.
class Counter {
static int count = 0;
Counter() {
count++; // count는 더이상 객체변수가 아니므로 this를 제거하는 것이 좋다.
System.out.println(count); // this 제거
}
}
public class Sample {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
}
}
static 메서드 - 객체 생성 없이도 클래스를 통해 메서드 직접 호출 가능 (스태틱 메서드 안에서는 객체 변수 접근 불가)
import java.text.SimpleDateFormat;
import java.util.Date;
class Util {
public static String getCurrentDate(String fmt) {
SimpleDateFormat sdf = new SimpleDateFormat(fmt);
return sdf.format(new Date());
}
}
public class Sample {
public static void main(String[] args) {
System.out.println(Util.getCurrentDate("yyyyMMdd")); // 오늘 날짜 출력
}
}
싱글톤 패턴 - 단 하나의 객체만을 생성하게 강제하는 디자인 패턴
class Singleton {
private static Singleton one;
private Singleton() {
}
public static Singleton getInstance() {
if(one==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 출력
}
}
Quiz
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");
}
}
답 - B) 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
코딩테스트
백준 #10809
https://www.acmicpc.net/problem/10809
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
scanner.close();
for (char c = 'a'; c <= 'z'; c++) {
System.out.print(s.indexOf(c) + " ");
}
}
}
백준 #3052
https://www.acmicpc.net/problem/3052
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean[] remainders = new boolean[42];
for (int i = 0; i < 10; i++) {
int num = scanner.nextInt();
remainders[num % 42] = true;
}
scanner.close();
int count = 0;
for (boolean remainder : remainders) {
if (remainder) {
count++;
}
}
System.out.println(count);
}
}
'WINK-(Web & App) > JAVA 스터디' 카테고리의 다른 글
[2024-2 Java 스터디] 김지수 #6주차 (0) | 2024.11.21 |
---|---|
[2024-2 Java 스터디] 이가인 #6주차 (1) | 2024.11.21 |
[2024-2 Java 스터디] 강보경 #6주차 (0) | 2024.11.20 |
[2024-2 Java 스터디] 김지나 #6주차 (0) | 2024.11.20 |
Java[2024-2 Java 스터디] 이민형 #5주차 6장 (0) | 2024.11.14 |