: 클래스는 참조 타입을 만들고 사용하기 위한 '설계도'
: 참조타입은 반드시 클래스가 있어야함
public class Geo{
}
: 클래스의 목적과 역할을 구분하기 위해 만듬
Introduce는 나이, 이름값을 저장하기 위해 멤버변수로 선언한다.
public class Introduce { // 클래스 선언(설계도)
public int age; //나이멤버 -> 중요한 데이터
public String name; //이름멤버 -> 중요한 데이터
}
클래스에서 멤버변수를 선언하면 초기화 작업을 따로 하지 않아도 자동 초기화 된다.
기본 타입은 모두 0에 관련된 값으로 자동초기화
참조 타입은 모두 null로 초기화
public class People { // 클래스 선언(설계도)
public int age = 0; //0으로 초기화
public String name = ""; //null로 초기화
}
new 키워드를 이용하여 객체를 생성한다.
public class PeopleMain{
public static void main(String[] args){
People p1 = new People();
p1.age = 20;
p1.name = "kim";
}
}
멤버필드를 감추기 위해 public > private으로 변경한다.
접근제한자 : public, private
접근제한자를 사용하면 클래스로 캑체를 생성해도 멤버변수에 전혀 접근할 수 없다. 그래서 메서드를 사용하여 멤버변수 값을 넣거나 값을 가져오는 메서드를 public으로 만든다.
은닉화를 통해서 public 메서드만 사용하게 만들 수 있다.
public class People {
private int age = 0;
private String name = "";
// 멤버변수를 가져오는 함수
public int getAge(){
return age;
}
public String getName(){
return name;
}
// 멤버변수 값을 넣는 함수
public int setAge(int age) {
this.age = age;
}
public String setName(Strubg name){
this.name = name;
}
}
생성된 객체 자신의 주소를 참조하는 레퍼런스이다.
this은 멤버변수를 의미한다.
메서드 인자와 멤버이름이 같은 경우에는 메서드 인자가 우선이다.
객체 내부에서 사용할 때만 'this'를 사용한다
객체를 생성하면서 멤버변수에 값을 넣고 싶을 때는 생성자를 사용한다.
생성자는 new 키워드에 의해서만 호출되는 메서드이다.
생성자와 클래스는 이름이 같아야한다.
public class People {
public int age;
public String name;
People(){ //기본생성자
this(20,'kim'); //기본생성자->People(20,'kim) 호출
}
People(int age, String name){ // 생성자 오버로딩
this.age = age;
this.name = name;
}
}
지금까지 만든 객체는 데이터를 저장하거나 전달하기 위한 목적이다.
이런 용도의 객체를 (VO : Value Object) 또는 DTO(Data Transfer Object)라고 한다.
많은 인자로 받는 메서드를 만들려면 6개의 오버로딩 메서드가 필요하다.
복잡한 오버로딩의 수를 줄일 수 있는 방법이 바로 Var args(...)이다.
Var args(...)는 배열 처럼 동작한다.
인자 개수에 관계없이 메서드 하나만 있으면 모든 경우에 대해 실행된다.
심지어 인자가 하나만 있어도 되고 배열이어도 가능하다.
public class PeopleMain {
People p1 = new (20,"kim");
People p2 = new (23,"park");
People p3 = new (25,"choi");
public static void showPeople(Student ...st){
for(Student st : sts){
System.out.printf(st.getAge() + ", " + st.getName());
}
}
객체도 배열로 표현해서 사용할 수 있다.
기본 타입 배열과 달리 반드시 new를 사용해 객체를 생성해야 한다.
Student[] sts1 = Student[] {
new Student(20, "kim");
new Student(23, "park");
new Student(25, "choi");
}
Student[] sts2 = new Student[3];
sts2[0] = new Student(20, "kim");
sts2[1] = new Student(23, "park");
sts2[2] = new Student(25, "choi");
스스로 인덱스를 만들어서 실행되기 때문에 개발자가 인덱스를 붙이지 않아도 되는 for문.
출력 전용이므로 값을 변경하려면 예외가 발생한다.
배열과 List 자료구조에서 사용된다
for(Student st : sts) {
System.out.println(st.getAge + ", " + st.getName);
}