강좌 Course 1. Part 3. ch1 요약
어떤 숫자를 변수에 저장하려면 변수를 하나 선언하면 끝이지만, 책에 대한 정보를 저장하고 싶다면 책의 제목, 저자, isbn, 출판사, 가격 등 서로 다른 형태의 여러 자료가 존재할 수 있다. 이를 각각의 변수를 선언하여 저장해줄 수도 있지만, 그보다 더 효율적인 방법은 사용자정의 자료형 객체를 생성하여 이 객체에 저장하는 것이다.
배열은 안에 든 자료의 자료형이 전부 일치하지만, 객체는 일치하지 않아, 앞서 말한 책처럼 정수형, 문자열, 실수형 등 여러 자료형을 가지는 등 이질적인 구조를 띠기 때문에 따로 설계가 필요하다. 사용자는 클래스를 사용하여 직접 자료형을 설계할 수 있다.
이렇게 사용자가 정의한 자료형은 어떤 구조를 가지고 여러 자료를 한 덩어리로 묶은 것으로, 객체, Value Object, Data Transfer Object(DTO) 혹은 모델이라고도 한다.
객체의 상태정보는 멤버변수, 속성, 프로퍼티라고도 하며 이는 값이 정해져 있거나 주어진 것들을 말한다. 반대로 행위정보는 객체의 기능이나 동작으로, 객체가 가진 메서드를 말한다.
// 예시 - Person 클래스
public class Person {
// 상태정보
public String name;
public int age;
public String phone;
// 행위정보
public void play(){
System.out.println(name+" plays.");
}
public void eat(){
System.out.println(name+" eats.");
}
public void walk(){
System.out.println(this.name+" walks.");
}
}
클래스는 객체를 설계(=모델링)하는 도구이다.
자료형 측면에서 클래스는 새로운 자료형을 만드는 도구라고 할 수 있다.
객체지향 측면에서 클래스는 현실의 객체를 객체지향 프로그램에서 사용하기 위해 객체의 상태정보(멤버변수)와 행위정보(멤버메서드)를 뽑아서 설계하는 도구이다.
객체 생성자 메서드는 모든 클래스에 기본으로 만들어져있는 메서드로, 객체를 초기화하는 데 사용한다. new 연산자로 호출한다.
객체 생성자 메서드의 이름은 클래스 이름과 동일해야 하고, 접근제한자가 public인 경우에만 호출할 수 있다. 또, return 타입이 없다(void도 적지 않는다).
public class MemberVO {
private String name;
private int age;
private String phone;
public MemberVO(String name, int age, String phone){
this.name = name;
this.age = age;
this.phone = phone;
}
위의 MemberVO라는 클래스에서 하단의 같은 MemberVO라는 이름을 가진 메서드가 바로 생성자 메서드이다. 이렇게 생성자 메서드를 정의해주면, new 생성자로 새로운 MemberVO 객체를 생성할 때, 매개변수로 name, age, phone을 전달할 수 있다. 이 때 MemberVO 객체의 프로퍼티인 name, age, phone에 각각 매개변수로 전달받은 자료를 저장하게 된다.
MemberVO a = new MemberVO("Amy",24,"010-1234-5678");
위의 생성자 메서드에 있는 this는 자기 자신을 가리키는 객체 변수이다(또는 참조변수, 포인터변수). MemberVO 생성자 메서드는 전달받은 매개변수를 현재 생성한 객체의 프로퍼티에 각각 저장하고 있는 것이다.