Class?
클래스는 객체 그자체가 아니라 객체를 생성하는 데 사용되는 하나의 틀이다. 이클래스를 통해 생성된 객체를 인스턴스라고한다.
클래스명은 주로 대문자로 시작한다.
class Example { // 클래스
int x = 10; // 필드
public void print() { // 메서드
}
Example() { // 생성자
}
class Example2 { // 이너 클래스
}
}
new 키워드를 통해 실제 객체를 생성하여 클래스 멤버에 접근한다
public class Main { //클래스명
public static void main(String[] args) { //main 클래스
Car car1 = new Car(); // Car 클래스로 만들어진 car1 인스턴스
}
}
}
. 포인트 연산자로 객체 안에 있는 멤버들에게 접근할 수 있다.
public class Main {
public static void main(String[] args) {
Car car1 = new Car("sorento", "white"); // 인스턴스 생성
// 필드 출력
System.out.println("model : " + car1.model); // model : sorento
System.out.println("color : " + car1.color); // color : white
// 메서드 호출
car1.power(); // 시동 걸기
car1.stop(); // 정지하기
}
}
class Car {
String model; // 필드
String color;
Car(String modelName, String colorName) { // 생성자
this.model = modelName;
this.color = colorName;
}
void power() { // 메서드
System.out.println("시동 걸기");
}
void stop() {
System.out.println("정지하기");
}
}
Field
클래스에 포함된 변수를 의미하는 것으로 객체의 속성을 정의할 때 사용된다.
class Example {
static int num1; // 클래스 변수
int num2; // 인스턴스 변수
void method() {
int num3 = 0; // 지역 변수
}
}
static 키워드가 함께 선언된 변수로, 한 클래스로부터 생성된 모든 인스턴스들이 특정한 값을 공유해야 할 때 사용된다. 독립적인 저장공간을 가지는 인스턴스 변수와는 달리 공통된 저장공간을 공유한다.
인스턴스를 따로 생성하지 않고도 클래스명.클래스변수명으로 사용할 수 있다.
static 키워드가 없는 변수로, 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수이다. new 생성자()를 통해 인스턴스가 생성될 때 만들어진다.
메서드 내에 포함된 모든 변수로, 메서드 {} 안에서만 사용할 수 있다. 다른 멤버 변수와는 달리 stack 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸된다.
지역 변수는 직접 초기화하지 않으면 값을 출력할 때 에러가 발생한다.
public class Main {
public static void main(String[] args) {
Example obj1 = new Example();
// 클래스 변수 출력 (권장)
System.out.println(Example.num1); // 10
// 인스턴스 참조를 통해 클래스 변수 출력
System.out.println(obj1.num1); // 10
// 인스턴스 변수 출력
System.out.println(obj1.num2); // 5
// 지역 변수 출력
System.out.println(obj1.method()); // 0
Example obj2 = new Example();
obj2.num1 = 20; // 클래스 변수값 변경
System.out.println(obj1.num1); // 20 (클래스 변수 공유)
System.out.println(obj2.num1); // 20
}
}
class Example {
static int num1 = 10; // 클래스 변수
int num2 = 5; // 인스턴스 변수
int method() {
int num3 = 0; // 지역 변수
return num3;
}
}
Method
특정 작업을 수행하는 명령문들의 집합이다.
public int add(int x, int y) { // 메서드 시그니처
int result = x + y; // 메서드 바디
return result;
}
반환타입이 void가 아닌 경우에는 메서드 바디에 return 문이 존재해야 한다.
return은 작업을 수행한 결과값을 호출한 메서드로 전달하며 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능해야 한다.
public class Main {
public static void main(String[] args) {
Example obj = new Example();
System.out.println(obj.add(10, 6)); // 16
obj.printHello(); // Hello
}
}
class Example {
public int add(int x, int y) { //자료형이 있는 메서드
int result = x + y; // 리턴값 초기화
return result; //리턴
}
void printHello() { //반환타입 void
System.out.println("Hello");
}
}
Constructor
객체를 생성하는 역할을 하는 클래스의 구성요소로, 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
new 생성자()로 인스턴스를 생성할 때 new는 인스턴스 생성을 담당하고, 생성자()는 인스턴스 변수들을 초기화한다.
모든 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다.
-> 생성자가 없으면 자바 컴파일러가 자동으로 기본 생성자를 추가한다.
생성자명은 클래스명과 같아야 한다.
return이 없다.
오버로딩으로 같은 이름을 가진 생성자를 여러 개 만들 수 있다.
public class Main {
public static void main(String[] args) {
Car sorento = new Car();
bmw.model = "sorento";
bmw.color = "white";
System.out.println("model : " + sorento.model); // model : sorento
System.out.println("color : " + sorento.color); // color : white
Car k8 = new Car("k8", "black");
System.out.println("model : " + k8.model); // model : k8
System.out.println("color : " + k8.color); // color : black
}
}
class Car {
String model;
String color;
Car() { // 기본 생성자
}
Car(String modelName, String colorName) { // 매개변수가 있는 생성자 (오버로딩)
this.model = modelName;
this.color = colorName;
}
}