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 출력
}
}
'Java' 카테고리의 다른 글
[2024-2 Java 스터디] #7주차 "예외처리, Threads, 함수형 프로그래밍" (0) | 2024.11.27 |
---|---|
6주차 퀴즈 (0) | 2024.11.21 |
5주차 퀴즈 (0) | 2024.11.14 |
[2024-2 Java 스터디] #5주차 "콘솔, 파일 입출력" (0) | 2024.11.14 |
4주차 퀴즈 (2) | 2024.11.06 |