클래스 : 붕어빵을 만드는 틀
객체(인스턴스) : 붕어빵 - 메모리에 올라간 클래스
// 붕어빵 틀
public class Car {}
// 붕어빵 만들기
public class Car {
// 자바 기본 메인 함수
public static void main(String[] args) {
Car c1 = new Car(); // 붕어빵1 인스턴스를 만든다
Car c2 = new Car(); // 붕어빵2 인스턴스를 만든다
// new 는 클래스를 메모리에 올려달라는 뜻
}
}
자동차가 있다. 자동차는 이름이 있고 번호가 있다. 이런 속성을 자바에서는 필드라고 한다. 한반에 20명의 학생이 있다. 그것은 20개의 인스턴스가 있다는 뜻 이다. 각각의 인스턴스는 필드가 다르다.
public class Car {
// 타입 필드명
String name;
int number;
}
// 자바 메인 함수
main {
Car car1 = new Car();
car1.name = "소방차"
car2.number = 1234
}
객체지향 - 하나의 사물을 하나의 클래스로 선언
사물 - 상태와 행동으로 나뉜다
필드 - 상태 ex) 이름, 번호
메소드 - 행동 ex) 전진, 후진
메소드는 입력값을 받아서 결과값을 도출해 내는 함수과 비슷한 느낌
입력값 - 인자(Argument) : 어떤 함수를 호출 시 전달되는 값 / 호출
매개변수(Parameter) : 전달된 인자를 받아들이는 변수 / 받아들이기
결과값 : 리턴값
선언
public class MyClass {
// 메소드의 양식
public 리턴타입 메소드명 (매개변수1,매개변수2...) { 기능 구현 }
// 리턴 타입 X 매개변수 X
public void method1 () { // void는 리턴값이 없을 때 설정한다
System.out.println("리턴타입,매개변수 없는 메소드 실행")
}
// 리턴타입 X 매개변수 O
public void method2 (int x) {
System.out.println(x + "매개변수를 받았어요")
}
// 리턴타입 O 매개변수 X
public int method3 () {
return 10;
}
// 리턴타입 O 매개변수 O
public int method4 (int x) {
System.out.println(x + "매개변수를 받았어요")
return x;
}
}
위의 MyClass 사용해보겠다. 메소드를 사용하기 위해선 인스턴스를 먼저 만들어야 한다. 붕어빵틀이 있어도 붕어빵을 먹기 위해서는 붕어빵을 만들어야 한다는 것과 유사하다.
MyClass myclass = new MyClass ();
myclass.method1();
// return 값이 int이기 때문에 value에 return 값이 들어간다.
int value = myclass.method4(10)
클래스는 인스턴스를 생성하지 않으면 사용할 수 없다
하지만 static을 붙이면 클래스의 인스턴스를 생성하지 않아도 static한 메서드나 필드를 사용할 수 있다.(static 메서드는 static을 앞에 붙인 것 )
또한 static한 메소드 내에서 static 하지 않은 필드를 사용할 수 없다.
public class MyScope {
int global = 10;
static int staticGlobal = 10;
public static voide main(String[] args) {
global // 사용 불가능
staticGlobal // 사용 가능
MyScope v1 = new MyScope();
MyScope v2 = new MyScope();
v1.global = 10;
v2.global = 20;
// v1.global 은 10이 나오고 v2.global 은 20이 나온다
v1.staticGlobal = 10;
v2.staticGlobal = 20;
// v1.global 은 20이 나오고 v2.global 은 20이 나온다. 저장 공간이 하나기 때문
MyScope.staticGlobal // static 변수는 이렇게 쓰는게 바람직하다
}
}
열거형은 jdk5에서 추가된 문법. 열거형 이전에는 static과 final을 이용해서 사용했었다.
enum Gender {
MALE,FEMALE // 이 2개의 값 이외에는 사용할 수 없다
}
public class EnumExam {
public staitc final String MALE = "MALE"
public static void main(String[] args) {
String gender1;
gender1 = EnumExam.MALE; // 하지만 젠더에는 다른 문자를 넣을 수도 있다
Gender gender2;
gender2 = Gender.MALE;
gender 2 = "boy" // 오류 발생
}
}
기본 생성자 - 매개변수가 없는 생성자
그렇기 때문에 우리가 클래스를 만들었을 때 생성자가 없다면 기본 생성자가 자동으로 생성되는 것 이다.
// 생성자가 없는 클래스 - 컴파일시 기본 생성자가 생성된다
public class Car1 {
String name;
}
// 생성자가 있는 클래스 - 기본 생성자는 생성되지 않는다
public class Car2 {
String name;
// 생성자 생성
public Car2(String s) {
name = s;
}
}
main {
Car1 car1 = new Car1() // 기본 생성자가 있기 때문에 오류 X
Car2 car2 = new Car2() // 기본 생성자가 없기 때문에 오류 O
Car2 car3 = new Car2("아반떼") // 생성자의 매개변수에 맞기 때문에 오류 X
}