클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.
객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급
💎 클래스의 구성(member)
1. field - 클래스에 포함된 변수(variable)를 의미
2. method - 어떠한 특정 작업을 수행하기 위한 명령문의 집합
💎 Keyword
1. instance - 메모리에 할당된 객체를 의미
- 이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다.
- 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게된다.
문법
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부
}
1. 접근 제어자 : 해당 메서드에 접근할 수 있는 범위를 명시 (public, private, defalut, protected)
2. 반환 타입(return type) : 메서드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시
3. 메소드 이름 : 메서드를 호출하기 위한 이름을 명시
4. 매개변수 목록(parameters) : 메서드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시
5. 구현부 : 메서드의 고유 기능을 수행하는 명령문의 집합
💎 자바에서는 하나의 클래스에 같은 이름의 메소드를 둘 이상 정의할 수 없다 하지만 메소드 오버로딩(overloading)을 이용하면, 같은 이름의 메소드를 중복하여 정의할 수 있다.
overloading
매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것
클래스 내에서 메소드는 static 키워드의 여부에 따라 다음과 같이 구분
예제)
class Method {
int a = 10, b = 20; // 인스턴스 변수
int add() { return a + b; } // 인스턴스 메소드
static int add(int x, int y) { return x + y; } // 클래스 메소드
}
public class Member02 {
public static void main(String[] args) {
System.out.println(Method.add(20, 30)); // 클래스 메소드의 호출
// 출력 -> 50
Method myMethod = new Method(); // 인스턴스 생성
System.out.println(myMethod.add()); // 인스턴스 메소드의 호출
// 출력 -> 30
}
}
객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메서드
자바에서 생성자(constructor)의 이름은 해당 클래스의 이름과 같아야한다.
생성자는 반환값이 없지만, 반환 타입을 void형으로 선언하지 않는다.
생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있다.
즉, 생성자도 하나의 메소드이므로, 메소드 오버로딩이 가능하다는 의미이다.
예제)
class Car {
private String modelName;
private int modelYear;
private String color;
private int maxSpeed;
private int currentSpeed;
// 생성자
Car(String modelName, int modelYear, String color, int maxSpeed) {
this.modelName = modelName;
this.modelYear = modelYear;
this.color = color;
this.maxSpeed = maxSpeed;
this.currentSpeed = 0;
}
public String getModel() {
return this.modelYear + "년식 " + this.modelName + " " + this.color;
}
}
public class Method02 {
public static void main(String[] args) {
Car myCar = new Car("아반떼", 2016, "흰색", 200); // 생성자의 호출
System.out.println(myCar.getModel()); // 생성자에 의해 초기화되었는지를 확인함.
}
}
자바에서 클래스를 선언하는 방법은 접근 제어자와 함께 class 키워드를 사용하면 된다.
객체 지향에서 정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념이다. 그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 된다.
자바에서는 이러한 정보 은닉을 위해 접근 제어자(access modifier)라는 기능을 제공하고 있습니다.
접근 제어자의 접근 범위
문법
클래스이름 객체참조변수이름 = new 클래스이름(); => 선언과 생성을 동시에 진행
예제) Car myCar = new Car();