클래스란?
- 객체를 생성하기 위한 설계도
- 클래스의 구성 멤버에는 필드, 생성자, 메서드
생성과정
- 클래스 선언
- 클래스의 필드 정의
- 클래스의 생성자 정의
- 클래스의 메서드 정의
예시
public class 이름 { // 클래스 선언
type 변수명; // 필드
public 이름() {} // 기본 생성자
반환type 메서드명(type 매개변수명) { } // 메서드
}
객체 생성과 참조형 변수
객체 생성
new Class이름();
참조형 변수
Class이름 c1 = new Class이름(); // Class이름의 객체인 c1 인스턴스 생성
Class이름 c2 = new Class이름(); // Class이름의 객체인 c2 인스턴스 생성
객체 배열
Class이름[] 변수이름 = new Class이름[크기]
객체의 속성 : 필드
필드란?
- 객체의 데이터를 저장하는 역할
- 고유한 데이터, 상태 데이터, 객체 데이터로 분류

필드의 초기값과 초기화
- 기본적으로 초기값을 제공하지 않을 경우 객체가 생성될 때 자동으로 기본값으로 초기화
- 필드 타입별 기본값

필드 사용 방법
Class이름[] 변수이름 = new Class이름[크기]
변수이름.필드이름
객체의 메서드
메서드 선언 방법
리턴타입 메서드명(매개변수, ...) {
실행할 코드 작성
}
메서드 호출 방법
Class변수이름.Class메서드이름(매개변수);
리턴타입 메서드명(매개변수, ...) {
Class메서드이름(매개변수)
}
메서드 오버로딩
오버로딩
- 함수가 하나의 기능만을 구현하는것이 아니라 하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능
- 즉, 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입, 순서가 다르면 동일한 이름을 사용해서 메서드를 정의할 수 있다.
오버로딩의 조건
- 메서드의 이름이 같고, 매개변수의 개수, 타입, 순서가 달라야 합니다.
- '응답 값만' 다른 것은 오버로딩을 할 수 없습니다.
- 접근 제어자만 다른 것도 오버로딩을 할 수 없습니다.
결론, 오버로딩은 매개변수의 차이로만 구현 가능
오버로딩의 장점
- 메서드 이름 하나로 상황에 따른 동작을 개별로 정의할 수 있습니다.
ex.메세지 출력할때 쓰는 println() 의 매개변수로는 int, double, String, boolean 등 다양하게 넣을수 있음
- 메서드의 이름을 절약 가능
- 만약 오버로딩이 안된다면 println() 는 printlnInt(), printlnDouble() 처럼 메서드명이 길어지고 낭비 되었을 것
기본형 & 참조형 매개변수
-
기본형 매개변수
- 메서드를 호출할 때 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달
- 매개변수의 타입이 기본형일 때는 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값이 변경되지 않음.
-
참조형 매개변수
- 메서드를 호출할 때 전달할 매개값으로 지정한 값의 주소를 매개변수에 복사해서 전달
- 매개변수를 참조형으로 선언하면 값이 저장된 곳의 원본 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능
- 메서드의 매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있음.
- 반환타입이 참조형이라는 것은 반환하는 값의 타입이 “실제값의 주소”라는 의미
생성자
생성자 선언화 호출
- 생성자는 반환 타입이 없고, 이름은 클래스 이름과 동일해야 함
new연산자에 의해 객체가 생성될 때 생성자가 호출됨
기본 생성자
- 선언할 때 괄호( ) 안에 아무것도 넣지않는 생성자를 의미
- 모든 클래스는 반드시 생성자가 하나 이상 존재
- 만약 클래스에 생성자를 하나도 선언하지 않았다면 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가해줌
- 반대로 단 하나라도 생성자가 선언되어있다면 컴파일러는 기본 생성자를 추가하지 않습니다.
- 컴파일러에 의해 생성되는 기본 생성자는 해당 클래스의 접근 제어자(public, …)를 따름
- 한개 이상의 생성자가 존재할 때 기본 생성자를 호출할 경우 오류가 생기게 된다.
필드 초기화
- 생성자는 객체를 초기화하는 역할을 수행
- 객체를 만들때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화
- 반대로 인스턴스 마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋음
생성자 오버로딩
- 생성자를 통해 필드를 초기화 할 때 오버로딩을 적용 가능
- 오버로딩을 할 때 개수, 타입, 순서가 동일한데 매개변수명만 다르게 하는 경우는 오버로딩 규칙에 위배되기 때문에 오류가 발생
- 매개변수의 종류가 다를 때만 생성자 오버로딩 사용 가능
TIP
IntelliJ에서 클래스 필드의 get과 set을 자동으로 만드는 방법
- window : alt + insert
- mac : command + N 혹은 alt + N
- 수동 : 코드 부분 바탕 우클릭 → Generate → Getter and Setter → 원하는 필드 선택 → OK