학습목표
1. 객체 생성을 위한 클래스의 선언
2. 필드를 선언하고 생성 후, 이를 읽어들이거나 변경하는 방법
3. 생성자를 선언하고 생성자에서 필드를 초기화
4. 메소드의 다양한 기능 이해
5. 패키지 선언하는 방법
6. 접근 제한자의 종류와 사용 방법
객체란(object): 물리적으로 존재, 추상적으로 생각할 수 있는 것 중에서, 자신의 속성을 가지고 있으면서 식별 가능한 것을 말한다.
객체는 개별적으로 사용될 수 있지만, 대부분 다른 객체와 관계를 맺고 있다.
클래스: 설계도
인스턴스(instance): 클래스로부터 만들어진 객체
new 클래스()
new : 클래스로부터 객체를 생성시키는 연산자
생성자 : new연산다 뒤에 오는 것, 클래스() 형태 가짐
=> new 연산자로 생성된 객체는 메모리 heap영역에 생성된다.
=> 메모리 내에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없음! 그래서 new연산자는 힙영역에 객체를 생성시킨 후 객체의 번지를 리턴하도록 되어있다.
클래스 변수 = new 클래스();
Student s1 = new Student();
클래스에는 객체가 가져야 할 구성 멤버가 선언된다.
public class ClassName{
//필드
int fieldname;
//생성자
ClassName(){...}
// 메소드
void methodName(){...}
}
1. 필드(field) : 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
2. 생성자(constructor) : new연산자로 호출되는 특별한 중괄호{}블록, 객체 생성시 초기화 역할 담당, 메소드와 비슷하게 생겼지만, 클래스이름으로 되어있고 리턴 타입이 없다.
3. 메소드(method) : 객체의 동작에 해당하는 실행 블록
필드 : 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상테 데이터를 저장하는 곳
필드 선언 : 클래스 중괄호 {}블록 어디서든 존재할 수 있다.
하지만 생성자와 메소드 중괄호 {}블록 내부에는 선업 될 수 없다.
생성자와 메소드 중괄호 내부에 선언 된것 => 로컬 변수가 된다!
타입 필드 [= 초기값] ;
String comapny = "자동차" ;
타입 : 기본 타입(byte, short, int, long, float, double, boolean) 과 참조 타입(배열, 열거, 인터페이스) 모두 올 수 있다.
필드 사용 : 필드값을 읽고 변경하는 작업
public class Car{
// 필드
String company = "현대자동차";
String model = "그랜저";
int speed;
}
public class CarExample{
public static void main(String[] args){
//객체 생성
Car myCar = new Car();
//필드값 읽기
System.out.println("제작회사: " + myCar.company);
System.out.println("모델명: " + myCar.model);
System.out.println("현재속도: " + myCar.speed);
//필드값 변경
myCar.speed = 60;
System.out.println("수정된 속도: " + myCar.speed);
}
}
생성자Constructor : new연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
객체 초기화 : 필드를 초기화, 메소드를 호출해서 객체를 사용할 준비를 하는 것, 생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다.
모든 클래스는 생성자가 반드시 존재, 생성자를 하나 이상 가질 수 있다.
Car myCar = new Car(); // 기본 생성자
생성자를 명시적으로 선언하려면 : 반드시 선언된 생성자를 호출해서 객체를 생성해야만 한다.
클래스(매개변수 선언, ...) {
// 객체의 초기화 코드
}
생성자 : 메소드와 비슷한 모양 가지고 있으나, 리턴 타입이 없고, 클래스 이름과 동일하다.
매개 변수 선언 : 생략 가능, 여러개를 선언해도 좋음, new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 한다.
다른 값으로 초기화 하고 싶을때
1. 필드를 선언할 때 초기값을 주는 방법
2. 생성자에서 초기값을 주는 방법
public Korean(String name, String ssn){
this.name = name;
this.ssn = ssn;
}
생성자 오버로딩 : 매개변수를 달리하는 생성자를 여러 개 선언하는 것,
매개 변수의 타입, 개수, 순서가 다르게 선언한다!
생성자에서 다른 생성자를 호출할 때 : this() 코드 사용!
클래스([매개변수, ...]{
this(매개변수, ..., 값, ...); // 클래스의 다른 생성자 호출
실행문;
}