클래스의 두 종류
- 라이브러리 클래스: 다른 클래스에서 사용하기 위해 만든 클래스
직접 실행되지는 않음 - 실행(executable) 클래스: main 메서드를 포함하여 직접 실행이 가능한 클래스
클래스의 구성요소
Field(멤버 변수)
객체의 데이터를 담음
변수 선언과 비슷한 문법을 지님
지역 변수(local variables)와의 차이점
- 멤버 변수는 클래스 블록 안에 선언되지만, 지역 변수는 생성자/메서드 블록 안에 선언된다.
- 멤버 변수는 객체의 데이터를 담으므로 heap에 저장되지만, 지역변수는 생성자/메서드의 변수이기 때문에 함수 실행 중에 stack에 생성이 되고, 함수 값이 반환되면 stack에서 사라진다.
- 멤버 변수는 객체의 내부/외부에서 모두 사용할 수 있지만, 지역 변수는 생성자/메서드 블록 내부에서만 사용할 수 있다.
Constructor(생성자)
new라는 operator와 생성자를 함께 사용하여 객체를 초기화할 수 있다.
문법은 함수 선언 방식과 비슷하지만, return 값이 없음
생성자의 이름은 클래스 이름과 같음
예시) 생성자의 괄호 내부에는 파라미터가 들어갈 수 있음
public class Student {
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.grades = grades;
}
}
이후 student 객체를 만들고 싶으면 아래와 같은 명령어를 적을 수 있다.
아래 예시의 경우 st 객체의 이름과 나이가 각각 Cindy, 20으로 초기화 된다.
Student st = new Student("Cindy", 20);
만약 클래스 내부에 생성자를 선언하지 않는다면 자바 컴파일러가 알아서 생성자(default constructor)를 만들어 준다.
파라미터는 존재하지 않고, 생성자의 이름은 클래스의 이름과 동일하다.
클래스에 따로 생성자 선언이 보이지 않는다면 아래와 같이 새로운 객체를 만들 수 있다.
Student st = new Sudent();
이 때, 값들은 NULL로 초기화 된다.
Constructor Overloding
생성자도 overloading이 가능하다.
생성자의 파라미터 데이터 타입, 파라미터 개수에 따라 생성자가 overloading될 수 있다.
// 파라미터가 없으면
public Student() {}
// 파라미터가 String 하나이면
public Student(String name) {
this.name = name;
}
// 파라미터가 String과 int 두개이면
public Student(String name, int age) {
this.name = name;
this.age = age;
}
input되는 파라미터에 따라 생성자의 형식이 바뀐다.
Method(함수)
객체의 action을 함수로 구현하는 것
함수 선언 방식과 동일하다.