클래스 -> 인스턴스(객체)
=> 인스턴스화
객체는 속성과 기능으로 이루어져 있다.
class Person {
int age; // 변수
String name;
double height;
String info() { // 메소드
return String.format("나이:%d, 키:%.1f", age, height);
}
}
public class ClassTest1 {
public static void main(String[] args) {
Person p1 = new Person(); // reference type
p1.age = 30;
p1.height = 175.3;
Person p2 = new Person();
p2.age = 35;
p2.height = 165.3;
System.out.println(p1.info());
System.out.println(p2.info());
}
}
변수의 선언위치가 변수의 종류와 범위(scope)을 결정한다.
class Variables {
int iv; // 인스턴스 변수
static int cv; // 클래스변수(static변수, 공유변수)
void method() {
int lv = 0; // 지역변수
}
}
공유변수
)int add(int a, int b) {
int result = a + b;
return result;
}
void power() { // return값이 없는 경우 void 사용
power = !power;
}
참조변수.메서드 이름();
참조변수.메서드 이름(값1, 값2, ...); // 메서드에 선언된 매개변수가 있는 경우
class MyMath {
int add(int a, int b) {
int result = a + b;
return result;
}
}
MyMath mm = new myMaht();
int value = mm.add(1, 2); // 메서드 호출
현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아간다.
반환값이 있는 메서드는 모든 경우에 return문이 필요하다.
int max(int a, int b) {
if (a > b)
return a; => 오류
}
int max(int a, int b) {
if (a > b)
return a;
else
return b;
}
return문의 개수는 최소화하는 것이 좋다.
int max(int a, int b) {
if (a > b)
return a;
else
return b;
}
int max(int a, int b) {
int result = 0;
if (a > b)
result = a;
else
result b;
return result;
}
하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것
// 매개변수는 다르지만 같은 의미의 기능 수행
int add(int a, int b) {
return a + b;
}
long add (long x, long y) {
return x + y;
}
인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드
’
인스턴스 변수의 초기화 또는 인스턴스 생성 시 수행할 작업에 사용된다.
모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
Card c = new Card();
class Card {
...
Card() { // 매개변수가 없는 기본 생성자
...
}
Card(String kind, int number) { // 매개변수가 있는 생성자
...
}
}
모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
기본 생성자는 매개변수가 없는 생성자로, 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
Card() {} // 컴파일러에 의해 추가된 Card클래스의 기본 생성자
class Car {
String color;
String gearType;
int door;
Car() {}
Car(String c, String g, ind d){
color = c;
gearType = g;
door = d;
}
}
Car c = new Car("white", "auto", 4);
this()는 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
다른 생성자의 호출은 생성자의 첫 문장에서만 가능하다.
class Car {
String color;
String gearType;
int door;
Car(){
color = "white";
gearType = "auto"; => Car() { this("white", "auto", 4); }
door = 4;
}
}
this는 인스턴스 자신을 가리키는 참조변수로 사용된다.
인스턴스의 주소가 저장되어있고, 모든 인스턴스 메서드에 지역번수로 숨겨진 채 존재한다.
class Car {
String color;
String gearType;
int door;
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
변수를 선언하고 처음으로 값을 정하는 것을 초기화라고 한다.
멤버변수 (인스턴스 변수, 클래스 변수)와 배열은 각 타입의 기본값으로 자동 초기화 되므로 초기화를 생략할 수 있다.
그러나 지역변수는 사용전에 초기화를 필수로 해주어야 한다.
class InitTest{
int x; // 인스턴스 변수
int y = x;
void method1() {
int i;
int j = i; => 에러) 지역변수를 초기화하지 않고 사용함
}
void method2() {
int i = 10;
int j = i;
}
}
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
class Car {
...
Car(Sting color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}