
new로 생성.class Member {
String id, pwd, name;
int age; char gender;
String[] hobby;
}
// 사용
Member m = new Member(); // 기본값: 참조형 null, 숫자 0, char '\u0000'
m.id="user01"; m.age=20;
private + **공개 메소드(getter/setter)**에서 검증.class Monster {
private String kinds;
private int hp;
public void setKinds(String kinds){ this.kinds = kinds; }
public void setHp(int hp){ this.hp = Math.max(0, hp); }
public String getInfo(){
return "종류=" + kinds + ", 체력=" + hp;
}
}
| 범위 | 클래스 내부 | 같은 패키지 | 하위클래스 | 전체 |
|---|---|---|---|---|
public | O | O | O | O |
protected | O | O | O | |
| (default) | O | O | ||
private | O |
class MemberDTO {
private int number; private String name;
private int age; private char gender;
private double height, weight;
private boolean activated;
// getter/setter (boolean은 isActivated)
}
class User {
String id, pwd, name; java.util.Date enrollDate;
public User() {}
public User(String id, String pwd, String name){
this.id=id; this.pwd=pwd; this.name=name;
}
public User(String id, String pwd, String name, java.util.Date d){
this(id,pwd,name); this.enrollDate = d;
}
public User(User other){ this(other.id,other.pwd,other.name,other.enrollDate); }
}
void test() {}
void test(int n) {}
void test(int n, String s) {}
void test(String s, int n) {}
static & finalstatic클래스명.멤버 접근.final변경 불가 의미.
static final 대문자 관례).final 필드는 선언 시 혹은 생성자에서 반드시 초기화.
| 구분 | 키워드 | 저장영역 | 생성시기 | 소멸시기 |
|---|---|---|---|---|
| 클래스 변수 | static | static 영역 | 프로그램 시작 | 종료 |
| 인스턴스 변수 | (없음) | heap | 객체 생성 | GC 대상 |
| 지역 변수 | 메소드 내부 | stack | 블록 진입 | 블록 종료 |
class A {
static { /* 정적 초기화 */ }
{ /* 인스턴스 초기화 */ }
}
class Car {
String name; int max;
Car(String n, int m){ name=n; max=m; }
void driveMaxSpeed(){ System.out.println(name+"가 "+max+"km/h!"); }
}
Car[] cars = new Car[3];
cars[0]=new Car("페라리", 300);
cars[1]=new Car("람보르기니", 350);
cars[2]=new Car("롤스로이스", 250);
for (Car c : cars) c.driveMaxSpeed();
private, 공개는 메소드 중심(행위 설계 우선).final 적극 사용.public static final + UPPER_SNAKE_CASE.