현실세계 : 설계도 -> 객체 생성 ex) 건물
자바 : 클래스 -> 객체 생성
클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있음
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 함
하나의 클래스로 여러개의 인스턴스생성 가능


public class 클래스이름 {}
// -> 저장 -> 컴파일(javac.exe) -> 클래스이름.class 생성됨
클래스 생성 가능클래스만 public으로 선언 가능new 클래스();
new 연산자는 객체를 생성한 후, 객체 생성 번지를 리턴함public class Example{
A num1 = new A();
}
class A{
A(){...}
} // 클래스 선언
클래스 변수 num1 : 스택(stack) 영역에 존재
클래스 객체 new A() : 힙(heap) 영역에 존재

1개의 어플리케이션 = 1개의 실행클래스 + n개의 라이브러리 클래스

객체 내부 : 필드이름name으로 바로 접근
객체 외부 : 변수.필드이름myCar.name으로 접근
class Car{
String name;
Car(){ name = "A1"} // 객체 내부
} // 클래스 선언
Car myCar = new Car(); // 클래스 변수, 클래스 객체 생성
myCar.name = "B1"; // 객체 외부
new 연산자에 의해 호출되어 객체의 초기화를 담당
new 클래스();

public class Car{
Car(String model, String color, int maxSpeed){...}
}
Car myCar = new Car("그랜저", "black", 300);
// 클래스 생성
public class Korean {
// 필드 선언
String nation = "대한민국";
String name; // null
String ssn; // null
// 생성자 선언
public Korean(String name, String ssn){
this.name = name;
this.ssn = ssn;
}
}
// 클래스 객체 생성
Korean k1 = new Korean("자바", "123456-1234567");
public class Car {
Car(){...}
Car(String model){...}
Car(String model, String color){...}
Car(String model, String color, int maxSpeed){...}
}
Car Car1 = new Car();
Car Car2 = new Car("그랜저");
Car Car3 = new Car("그랜저", "black");
Car Car4 = new Car("그랜저", "black", 300);
Car(String model) {
this.model = model; // model 대입
this.color = "은색";
this.maxSpeed = 250;
}
Car(String model, String color) {
this.model = model; // model 대입
this.color = color; // color 대입
this.maxSpeed = 250;
}
Car(String model, String color, int maxSpeed) {
this.model = model; // model 대입
this.color = color; // color 대입
this.maxSpeed = maxSpeed; // maxSpeed 대입
}
중복 해결 방법
Car(String model) {
this(model, null, 0); // 3번째 생성자 호출
}
Car(String model, String color) {
this(model, color, 0); // 3번째 생성자 호출
}
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}

void powerOn{...} // 리턴값 없음
double divide(int x, int y){...} // double형을 리턴
// 메소드 호출
powerOn();
double result = divide(10, 20);
$와 _를 제외한 특수문자 사용 xdouble divide(int x, int y){...} // 메소드
double result = divide(10, 20);
int sum(int[] values){...} // 메소드 방법 1
int[] num = {1, 2, 3}
int result = sum(num);
int result = sum(new int[] {1, 2, 3});
int sum(int ... values){...} // 메소드 방법 2
int[] num = {1, 2, 3}
int result = sum(num);
int result = sum(new int[] {1, 2, 3});
int plus(int x, int y){
int result = x + y;
return result;
}
void run(){
return; // break;와 같음
}

public class ClassName {
int method1(int x, int y){
int result = x + y;
return result;
}
void method2(){
int result1 = method1(10, 20); //30 저장
double result2 = method1(10, 20); //30.0 저장
}
}
Car.java
public class Car {
int speed;
int getSpeed(){
return speed;
}
void keyTurnOn(){
System.out.println("키를 돌립니다");
}
}
CarExample.java
Car myCar = new Car();
myCar.keyTurnOn();
myCar.run();
int speed = myCar.getSpeed();
오버로딩의 조건 : 매개변수의 타입, 개수, 순서가 달라야 함
int plus(int x, int y){
int result = x + y;
return result;
}
int plus(double x, double y){
int result = x + y;
return result;
}
int x = 10;
double y = 20.3;
plus(x, y); // int 타입인 x가 double로 자동 형 변환
// plus(double x, double y)가 실행 됨