물리적, 추상적으로 존재하고 생각할 수 있는 자신의 속성을 가지고 있으면서 식별 가능한 것을 의미한다.
객체는 속성과 동작으로 구성된다.
이 속성과 동작을 각각 멤버 변수, 메소드라고 한다.
속성 | 이름, 나이, 주소, 색상, 모델명, 속도... |
---|---|
동작 | 웃다, 걷는다, 먹는다, 달린다, 멈춘다... |
자바에서 클래스는 설계도이다. 클래스에는 객체를 생성하기 위한 멤버변수와 메소드가 정의되어 있다.
클래스로부터 만들어진 메모리상의 객체를 해당 클래스의 인스턴스(instance)라고 한다.
클래스의 구조는
class 클래스이름 {
// 멤버 변수
// 생성자
// 메소드
}
객체를 생성하려면 new 연산자를 사용하면 된다.
new는 클래스로부터 객체를 생성시키는 연산자이다.
new 뒤에는 생성자가 오는데 생성자는 클래스() 형태를 가지고 있다.
new 연산자로 생성된 객체는 힙 메모리 영역에 생성된다.
클래스 변수;
변수 = new 클래스();
// 1개의 실행문으로 작성
클래스 변수 = new 클래스();
객체의 데이터가 저장되는 곳이다.
클래스에서 객체가 생성될 때 유일하게 객체에 포함되는 요소이다.
데이터타입 멤버변수 [=초기값];
String name;
new 연산자로 호출되는 특별한 중괄호{} 블록. 객체 생성 시 '초기화' 담당하는 곳이다.
멤버 변수를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 한다.
클래스 이름으로 되어 있고 리턴타입이 없다.
클래스로부터 객체를 생성할 때 생성자가 호출된다.
모든 클래스는 생성자가 반드시 존재하고 생성자를 하나 이상 가질 수 있다.
기본 생성자(default constructor) 는 클래스에 생성자가 하나도 없을 때 기본으로 생성된다.
기본생성자는 멤버 변수를 기본 값으로 초기화 한다. 왜냐하면 매개변수를 가질 수 없기 때문이다.
클래스() {
}
생성자 선언
클래스( 매개변수, ...) {
}
객체의 동작에 해당하는 실행 블록이다.
객체가 제공하는 기능이 메소드이다.
메소드 선언부를 메소드 시그니처라고 한다.
리턴타입 메소드이름 (매개변수선언, ...) {
// 실행할 코드 (메소드 기능)
return 메소드 실행결과;
}
- 리턴타입
메소드가 리턴값의 데이터 타입. 리턴값은 메소드를 실행할 후의 결과값이다.
리턴값이 있는 경우는 리터 타입이 선언부에 명시되어야 하고,
리턴값이 없는 경우 (아무것도 리턴하지 않는 경우)에는 리턴 타입에 void 를 선언한다.
- 메소드 이름
메소드 이름은 어떤 기능을 수행하는지 알 수 있도록 기능 이름으로 지어주는 것이 좋다.
너무 축약한다면 기능을 유추할 수 없다.
- 매개 변수
매개변수는 메소드가 실행할 대 필요한 데이터를 외부로부터 받기 위해서 사용한다.
매개변수가 선언된 메소드 안에서만 사용할 수 있는 로컬변수이다.
메소드 호출하기 위해서는 매개변수의 개수,타입에 맞는 인자를 전달해야 한다.
메소드 안에서 매개 변수가 필요한 경우가 있고, 필요 없는 경우가 있다.
❗️ return 문
메소드 선언에 리턴 타입이 있는 메소드는 반드시 return문을 사용해서 리턴값을 지정해야 한다.
return문이 없다면 커파일 에러가 발생하고, return문이 실행되면 메소드는 즉시 종료된다.
return 리턴값;
리턴값이 없는 메소드는 void를 사용한다.
void로 선언된 메소드에서도 return문을 사용할 수 있다. 리턴값을 지정하는 것이 아니라 메소드 실행을 강제 종료시키는 역할을 한다.
return;
한 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을 메소드 오버로딩이라고 한다.
오버로딩의 조건은 메소드 이름은 같고, 매개 변수의 타입,개수, 순서 중 하나가 달라야한다.
class 클래스 {
리턴타입 메소드이름 (타입변수, ...) {
}
// 리턴타입은 상관없고, 메소드이름은 동일, 매개 변수의 타입, 개수, 순서가 달라야 한다.
리턴타입 메소드이름 (타입변수, ...) {
}
}
메소드 오버로딩이 필요한 이유는 매개값을 다양하게 받아서 처리할 수 있도록 하기 위해서이다.
참고
혼자공부하는자바