Class
클래스의 구성요소 : 멤버변수, 메서드, (생성자)
멤버변수가 먼저,(생성자), 메서드가 뒤에 선언
클래스- 설계도
객체 - 클래스에 의해 생성되는 제품
메서드 - 객체가 할 수 있는 기능
클래스의 구성요소
멤버변수 : 속성, 정보
메서드 : 기능
ex ) 프린터 클래스
- 속성(멤버변수) : 크기, 색, 제품명, 제조사, 종류
- 기능(메서드) : 인쇄, 복사, 팩스, 스캔
멤버변수 선언 위치
- 클래스 생성 후 메서드 시작 전
- 클래스 가장 위쪽
- 멤버변수는 클래스 안에서 사용가능. (클래스에서 생성되는 모든 메서드에서 공통적으로 사용가능)
객체 생성
- 클래스명 객체명; // 선언과 값은 null
- 객체명 = new 클래스명(); // 선언한 객체의 초기값을 생성자가 설정.
- 클래스명 객체명 = new 클래스명();
메서드 사용법 (클래스가 다른 메서드를 호출 할 경우)
객체 선언 후 객체명. 메서드명();
- 같은 클래스안에서 메서드 호출 => 메서드명();
- 다른 클래스안에서 메서드를 호출 => 객체명.메서드명();
접근제한자(제어자)
- public : 모두 사용가능
- protected : 나 + 패키지 + 자식클래스
-(default) : 나 + 패키지
- private : 나
private < default < protected < public
- 클래스에서 public 클래스명 : 파일명과 클래스명이 같을 때만 가능.
- 하나의 java 파일안에 여러개의 클래스를 가지는 것은 가능함.
- 하지만 public class가 두개는 불가능.
- 멤버변수, 멤버 메서드는 public을 붙이는건 문제가 없음. 사용가능.
- 일반적으로 멤버변수는 private, 메서드는 public 선언이 일반적.
- private : 다른 클래스에서 접근 불가능.
- private으로 선언된 멤버변수는 getter / setter 라는 메서드를 만들어서 해당 변수에 접근 가능하도록 한다.
Car 클래스 만들어보기
class Car{ // 클래스명은 대문자로 시작
//멤버변수는 private
//name, color, year, power, speed
private String name;
private String color;
private String year;
private boolean power;
private int speed;
// 1. 시동을 켜야 속도를 올릴 수 있음.
// 2. 속도가 있는 상태에서는 시동을 끌 수 없습니다.
// 3. 속도는 0~200 사이의 범위를 가질 수 있다.
// 메서드는 public
//power() => 켜져있으면 꺼지고, 꺼져있으면 켜짐.
// 선언부 결정. 리턴타입 => void 매개변수 x
public void onOff() {
if(this.speed == 0 ) { // 속도가 0 일때만 시동을 키고 끌 수 있음
this.power = !this.power;
} else {
System.out.println("속도가 0 일때만 시동을 키고 끌 수 있습니다. ");
}
}
//speedUp() // 10 씩 속력 증가
//선언부 결정. 리턴타입 => void / 매개변수 x
public void speedUp() {
if(this.power) {
if(speed >= 200) {
speed = 200;
System.out.println("최고속도입니다.");
return;
} else {
speed +=10;
System.out.println("speed: "+speed);
}
} else {
System.out.println("power >" + this.power);
}
}
//speedDown()
public void speedDown() {
if(this.power) {
if(speed <= 0) {
speed = 0;
System.out.println("멈췄습니다.");
return;
} else {
speed -= 10;
System.out.println("speed: "+speed);
}
} else {
System.out.println("power >" + this.power);
}
}
//print() => name, color ,year 출력
public void print() {
System.out.println("이름: "+name+" 색깔: "+color+" 연도: "+year);
}
public void speedPrint() {
if(this.power) {
System.out.println("시동 on! speed: "+this.speed);
} else {
System.out.println("시동 off!!");
}
}
// getter/setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public boolean isPower() {
return power;
}
public void setPower(boolean power) {
this.power = power;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
생성자
생성자 : 객체를 생성하기위해 객체의 초기화를 담당.
생성자의 접근제한자는 반드시 public 이여야 함.
생성자명은 클래스명과 반드시 같아야 함.
생성자는 메서드와 달리 return 타입이 없음.
생성자 public 클래스명(){} => 컴파일 할 때 자동 생성
생성자를 사용자가 직접 만들게 되면 기본생성자는 만들지 않음.
public Car1() {
//기본생성자
}
생성자는 여러개 만들 수 있음. (생성자 오버로딩)
오버로딩 조건 : 매개변수의 개수가 다르거나 타입이 달라야함.
ex)
public Car1(String name) {
this.name = name;
}
public Car1(String name, String color) {
this.name = name;
this.color = color;
}
public Car1(String name, String color, String year, String door) {
//생성자 호출
this(name,color);
// this.name = name;
// this.color = color;
this.year = year;
this.door = door;
}
생성자를 호출 할 때는 무조건 첫 줄에서 해야함.