[Java] Class와 객체
클래스
public class Car {
String color = "빨간색";
int fuel = 85;
public void putAccel(){
System.out.println("차가 나아갑니다.");
}
public void putBreak(){
System.out.println("차가 멈춥니다.");
}
}
- 객체를 생성하기 위한 틀이라고 볼 수 있다.
- 클래스를 활용하여 인스턴스(객체)를 생성할 수 있다.
- 클래스는 객체 그 자체가 아니며 단순히 객체를 생성하기 위한 틀에 불과하다.
- 클래스에서는 실제 속성을 나타내는 멤버변수(필드)와 동작을 나타내는 메서드로 구성을 나눌 수 있다.
- 클래스는 해당 클래스를 감싸고 있는 파일과 이름이 동일해야 하며 1파일 = 1클래스로 구성되는 것을 원칙으로 한다.
객체 선언 방법
- 객체선언 타입 인스턴트명(변수명) = new생성자함수();
Car car1 = new Car();
System.out.println(car1.color); // 빨간색
System.out.println(car1.fuel); // 85
car1.putAccel(); // 차가 나아갑니다.
car1.putBreak(); // 차가 멈춥니다.
}
field(필드)
- 클래스 내에서 선언되어지는 변수를 이야기함
- 보통 맴버변수라고 이야기를 하기도 함
- 클래스 내부에서 선언이 되어지며 모든 클래스 내의 메소드에서 접근해서 사용이 가능하다.
- field 값을 초기화 하지 않을 경우 해당 타입에 따라 다르게 초기화가 자동으로 이루어지는데
각 타입마다 자동화 되는 값은 다음과 같다.
=> int = 0;
=> float, double = 0.0;
=> char = 0x0000(NUL);
=> boolean = false;
=> String or Object = null;
※ 모든 참조형 변수는 예외없이 null로 초기화 된다.
메소드(Method)
- 메소드는 실제 클래스에서 기능을 정의하는 역할을 수행한다.
- 메소드의 형식은 접근제한자, 리턴타입, 메서드명(매개변수...) 순으로 정의가 가능하다.
- 메소드는 리턴타입과 매개변수에 따라 성질이 바뀌게 된다.
- 리턴타입이 없을 때는 메서드 명 앞에 void를 놓게 되며 안쪽에 반환하고자 하는 로직 구현을 하지 않아도 된다.
- 하지만 리턴타입을 명시할 경우 메소드명 앞에 void 대신 리턴할 타입을 선언하고 반드시 로직 안에 return이
존재해야 한다.
- 매개변수는 아무것도 선언하지 않아도 되며 선언할 경우 하나 이상의 매개변수 선언이 가능하다.
- 매개변수 선언 시 반드시 [변수 타입][변수 명] 식으로 선언을 해야 한다.
- 만약 내가 몇개의 데이터를 받을 지 알 수 없을 때에는 매개변수의 변수 명 앞에 ... 을 붙여 동적으로 데이터를
받을 수 있다.
=> 단 이럴 경우 동적으로 받는 데이터들의 타입이 동일해야 하며 이를 안지킬 경우 에러가 난다.
This
- 객체 나 자신을 가리킬 때 쓰는 예약어
- 같은 객체 내에서 존재하는 필드나 메서드를 사용할 경우 사용하는 키워드
- 클래스 내의 메서드에서 해당 클레스에 존재하는 다른 메서드 혹은 필드에 접근할 경우 this. 를 활용하여 접근이 가능하다.
- 단 클래스 내의 메서드에서 해당 필드나 메서드를 접근하기 위해 this.은 생략이 가능하다.
- this. 를 쓸 경우 강제적으로 내 클래스 안의 필드 혹은 메서드를 가르키는 효과가 있으므로 외부에서 받아온 매개변수의 이름이 필드의 이름과 같을 시 시작적으로 구분을 해줄 수 있다.
- 생성자를 접근할 경우 this.(생성자에서 선언한 매개변수) 를 활용하여 접근할 수 있다.
- 단 생성자에 접근할 경우 생성자 내에서만 접근이 가능하며 생성자는 다른 필드나 메서드의 접근 또한 가능하지만, 일반 메서드에서 생성자의 접근은 불가능하다.