ex.
public class Car {
String model;
int speed;
}
Car(String model){
this.model = model;
}
void setSpeed(int speed) {
this.speed = speed;
}
----
public class CarTest {
public static void main(String[] args){
Car car1 = new Car("Kia");
Car car2 = new Car("Porsche");
// car1과 car2는 서로 다른 인스턴스
// car1의 인스턴스 멤버는 필드인 model, speed 그리고 메서드인 setSpeed이다.
}
}
OOP에서는 메소드를 통해서 데이터를 변경하는 방법을 선호한다. 데이터는 외부에서 접근할 수 없도록 막고, 메소드를 통해 데이터에 접근하도록 유도
1) 접근 제한자로 접근 자체를 막거나
2) 값 유효성 기준에 맞는 것만 넣어라
읽어오는 메서드 : get으로 시작
값을 필드에 저장하는 메서드 : set으로 시작
ex.
public class Room {
int deskCount; // 최대 20개까지
int chairCount; // 100 단위
int width; // 미터 단위
int getWidth() { // getter
return width;
}
int getWidthAsCM() {
return width * 100; // 저장된 값 필요한 형태로 바꿔서 리턴
}
void setDeskCount(int deskCount) { // setter
this.deckCount = deskCount;
}
void setChairCount (int chairCount) {
if (chairCount > 20) { // 20 초과면 20 출력
this.chairCount = 20;
} else { // 그 외에는 입력된 수 출력
this.chairCount = chairCount;
}
}
}
-선언*기준
필드: 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드, 객체마다 가지고 있을 필요성이 없는 공용적인 데이터라면 정적 필드
메서드: 인스턴스 필드를 이용해서 실행해야 한다면 인스턴스 메소드, 사용하지 않는다면 정적 메소드로 선언
public class 클래스{
static 타입 필드;
static 리턴타입 메소드 (매개변수선언, ...){
}
}
ex.
public class ClassSample {
String name; // 인스턴스 멤버 -> 객체 인스턴스에 관련된 멤버
static String id; // 정적 static 멤버 -> 클래스에 소속된 멤버
// static -> 객체 없이도 접근 가능
ClassSample(String name, String id) {
this.name = name;
this.id = id;
}
void printLine() {
System.out.println("---------------------");
}
static void printLineStatic() { // 정적 메소드
System.out.println("static---------------------");
}
}
public class ClassMain004 {
public static void main(String[] args) { // 클래스에 고정
ClassSample cs = new ClassSample("롱초", "3");
cs.id = "4"; // 인스턴스에 접근해서 바꿔도 되고
// 인스턴스 멤버 메소드
cs.printLine();
System.out.println(cs.id); // 4
// 클래스와 도트연산자로 접근할수도 있음
ClassSample.id = "static id입니다!!";
System.out.println(cs.id); // static id입니다!!
// 클래스로 정적 메소드 접근
ClassSample.printLineStatic();
}
}
++)
1. 메소드 중간의 return 문을 만나면 메소드를 탈출한다.
2. return 타입과 실제 리턴하는 값 사이에서도 자동형변환이 된다.
ex. return 타입이 더블인데 0을 리턴하려는 경우 -> int가 double로 자동형변환 / 강제 형변환 해주려면 리턴 시에 형변환 타입을 붙여준다.