구현할 대상(객체)를 고려하여 클래스를 정의해야 한다.
왜 클래스로 먼저 정의할까?
실존하는 대상인 객체를 잘 만들기 위함이다.
이때 정의를 대표적으로 나타낼 수 있는 이름을 도출하는데, 이것이 클래스명이다.
// Person 클래스가 존재한다고 가정
Person person = new Person("홍길동")
메모리에서의 상황을 살펴보면,
Person은 참조변수가 된다.즉, 인스턴스 변수는 항상 참조 타입 변수이다.
Person person1 = new Person("홍길동")
Person person2 = new Person("임꺽정")
위와 같은 상황에서
person1 , person2 인스턴스가 Heap 메모리 영역에 각각 생성됨.Person1, Person2 변수에 저장된다.Person1과 Person2는 참조 타입 변수이다.이처럼 클래스가 같아도 인스턴스는 new 연산자로 생성할 때마다 별개의 새로운 인스턴스를 만들어 낸다는 것을 인지해야 한다.
인스턴스.메소드명(인자1, 인자2, ...)
public class Person {
void whoAmI() {
System.out.println("홍길동 입니다.");
}
}
whoAmI() 메서드 호출Person person = new Person();
person.whoAmI();
내부 메소드는 점 연산자 없이 바로 메소드명으로 호출이 가능하다.
public class Person {
void whoAmI() {
howOld(); // 내부 메소드 호출
System.out.println("홍길동 입니다.");
}
void howOld() {
System.out.println("20살 입니다.);
}
}
public class Person {
String name = "홍길동"; // 필드 위치
int age = 20; // 클래스 실행블록 바로 아래에 선언
int getAge() {
return age;
}
}
public class Person {
String name = "홍길동";
int age = 20;
int getAge() {
return age; // 내부 필드는 필드명으로 바로 접근
}
}
Person person = new Person();
System.out.println(person.age); // 점 연산자 사용
public class Person {
String name;
int age;
// 생성자 실행블록
public Person(String n, int a) { // 매개변수를 받아 필드 초기값 설정
name = n; // 객체 초기화 코드 작성
age = a; //
}
}
Person person = new Person("홍길동", 20);
public class Person {
String name = "홍길동";
int age = 20;
// 생성자 실행블록 생략
}
// 정상적으로 객체 생성
Person person = new Person();