자바 클래스 만들기
클래스와 객체
클래스는 객체를 만들어 내기 위한 설계도 혹은 툴이며, 클레스 모양 그대로 생성된 실체가 객체입니다.
이러한 연유로 객체를 클래스의 인스턴스(instance)라고도 부릅니다.
클래스는 하나이지만 객체들은 수 없이 많이 생성될 수 있습니다.
객체들은 클래스의 모양대로 동일한 속성을 가지고 탄생하지만, 자신만의 고유한 값을 가짐으로써 구분됩니다.
클래스 구성
자바 클래스는 class 키워드를 사용하여 선언합니다.
클래스의 구성 요소를 멤버라고 부르며, 멤버는 필드(멤버 변수)와 메소드(멤버 함수)의 두 가지 입니다.

클래스 선언
class 키워드와 클래스 이름으로 선언하고 중괄호({ }) 안에 필드(field)와 메소드(method)를 모두 작성합니다.
캡슐화의 원칙클래스 외부에는 어떤 필드나 메소드를 둘 수 없습니다.
필드와 메소드
객체 내에 값을 저장할 멤버 변수를 필드라고 부릅니다.
메소드는 함수이며 객체의 행동을 구현합니다.
접근 지정자, public
메소드에 붙은 public을 접근 지정자(access specifier)라고 합니다.
public은 다른 클래스에서 활용하거나 접근할 수 있음을 선언합니다.
접근 지정자를 생략할 때 디폴트 접근이라고 부르며, 접근 지정자는 뒤에서 자세히 다릅니다.
생성자(constructor)
클래스의 이름과 동일한 메소드를 특별히 생성자(constructor)라고 합니다.
생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메소드입니다.
new 연산자와 객체 생성, 그리고 레퍼런스 변수
public static void main(String args[]) {
Circle pizza; // Circle 객체에 대한 레퍼런스 변수 pizza 선언
pizza = new Circle(); // Circle 객체 생성
pizza.radius = 10; // radius 필드에 10 저장
pizza.name = "자바피자"; // name 필드에 "자바피자" 저장
double area = pizza.getArea(); // pizza 객체의 면적 알아내기
}

레퍼런스 변수 선언
객체를 생성하기 전, 객체를 가리킬 레퍼런스 변수를 먼저 선언합니다.
Circle pizza; // 레퍼런스 변수 pizza 선언
변수는 레퍼런스를 가지는 변수일 뿐, 객체 자체는 아닙니다.
객체 생성, new 연산자 이용
반드시 new 연산자를 사용해야 합니다.
pizza = new Circle();
new 연잔자에 의해 객체가 생성되는 과정은 다음과 같습니다.
- 타입 크기의 메모리 할당
- 생성자 코드 실행
생성자는 객체가 생성될 때 필드를 초기화하거나 생성 당시에 꼭 필요한 작업을 위해 두는 것입니다.
레퍼런스 변수 선언과 객체 생성은 다음과 같이 동시에 할 수도 있습니다.
Circle pizza = new Circle();
객체 멤버 접근
객체의 멤버에 접근할 때는 다음과 같이 레퍼런스 변수 뒤에 점(..) 연산자를 붙입니다.
| 객체 레퍼런스.멤버 |
pizza.radius = 10;
pizza 객체의 radius 필드 값을 읽을 경우 다음과 같이 하면 됩니다.
int r = pizza.radius;
Circle 클래스의 객체 생성 및 활용
public class Circle {
int radius; // 원의 반지름 필드
String name; // 원의 이름 필드
public Circle() {
} // 생성자
public double getArea() { // 원의 면적 계산 메소드
return 3.14 * radius * radius;
}
public static void main(String[] args) {
Circle pizza; // 레퍼런스 변수 pizza 선언
pizza = new Circle(); // Circle 객체 생성
pizza.radius = 10; // 피자의 반지름을 10으로 설정
pizza.name = "자바피자"; // 피자의 이름 설정
double area = pizza.getArea(); // 피자의 면적 알아내기
System.out.println(pizza.name + "의 면적은 " + area);
Circle donut = new Circle(); // Circle 객체 생성
donut.radius = 2; // 도넛의 반지름을 10으로 설정
donut.name = "자바도넛"; // 도넛의 이름 설정
area = donut.getArea(); // 도넛의 면적 알아내기
System.out.println(donut.name + "의 면적은 " + area);
}
}
실행 결과
자바피자의 면적은 314.0
자바도넛의 면적은 12.56
Rectangle 클래스 만들기 연습
import java.util.Scanner;
class Rectangle {
int width;
int height;
public int getArea() {
return width * height;
}
}
public class RectApp {
public static void main(String[] args) {
Rectangle rect = new Rectangle(); // 객체 생성
Scanner scanner = new Scanner(System.in);
System.out.print(">> ");
rect.width = scanner.nextInt();
rect.height = scanner.nextInt();
System.out.println("사각형의 면적은 " + rect.getArea());
scanner.close();
}
}
실행 결과
>> 4 5
사각형의 면적은 20