생성자
new 클래스();
- new 연산자에 의해 호출되어 객체의 초기화 담당
- 클래스를 기반으로 객체를 생성
- 메소드와 동일(자동 호출됨)
- 필드의 값 설정
- 메소드 호출해 객체를 사용할 수 있도록 준비하는 역할 수행
- 생선자는 반환타입이 없음. (반환타입이 있으면 메소드)
- 생성자는 new 키워드가 객체 생성시에만 실행
기본 생성자
- 모든 클래스는 생성자가 반드시 존재하며 하나 이상 가질 수 있음
- 생성자 선언을 생략하면 컴파일러는 다음과 같은 기본 생성자 추가
public class Car() {} ----> public Car(){} : 자동추가
생성자 선언
- 디폴트 생성자 대신 개발자가 직접 선언
클래스(매개변수 선언, ...) { // 객체의 초기화 코드 }
- 개발자가 선언한 생성자 존재 시 컴파일러는 기본 생성자 추가하지 않음
생성자 오버로딩(Overloading)
오버로딩 : 동일한 이름의 생성자를 여러 개 선언하는 것.
- 매개변수의 타입, 개수, 순서가 다른 생성자 여러 개 선언
(똑같은 형태로는 안됨)
다른 생성자 호출( this() )
- this는 객체 자기 자신을 의미, ()는 메소드를 의미, this() : 자기자신의 메소드 = 자기자신의 생성자를 호출
- 생성자 오버로딩되면 생성자 간의 중복된 코드 발생
- 초기화 내용이 비슷한 생성자들에서 이러한 현상을 많이 볼 수 있음
- 초기화 내용을 한 생성자에 몰아 작성
- 다른 생성자는 초기화 내용을 작성한 생성자를
this(...)
로 호출
메소드
- 메소드는 C/C++의 함수와 동일
- 자바의 모든 메소드는 반드시 클래스 안에 있어야 함(캡슐화 원칙)
메소드 오버로딩
- 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
- 하나의 메소드 이름으로 다양한 매개값 받기 위해 메소드 오버로딩
- 오버로딩의 조건 : 매개변수의 타입, 개수, 순서가 달라야
(보통은 개수를 다르게 해서 많이 사용)
- 리턴 타입은 오버로딩과 관련 없음
메소드 오버로딩을 사용하는 이유
- 비슷한 기능을 제공하는 메서드를 여러 개 생성 시, 각각 다른 이름을 제공하는 것보다 동일한 이름을 사용하는 것이 사용자가 사용하기 편리하기 때문
인스턴스 멤버와 this
인스턴스 멤버란?
- 객체(인스턴스)마다 가지고 있는 필드와 메소드
- 이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부름
- 인스턴스 멤버는 객체 소속된 멤버이기 때문에 객체가 없이 사용 불가
this
- 객체(인스턴스) 자신의 참조(번지)를 가지고 있는 키워드
- 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해
this.멤버
사용
- 매개변수와 필드명이 동일할 때 인스턴스 필드임을 명확히 하기 위해 사용
- 객체 내에서는 this 키워드 생략가능,
매개변수 or 지역변수와 이름이 같은 멤버가 있을 경우, 멤버 호출 시 this를 반드시 사용해야함
- 📌생성자 코드의 제일 처음에 있어야 함
객체 배열
자바의 객체 배열 만들기 3단계
- 배열 레퍼런스 변수 선언
- 레퍼런스 배열 생성
- 배열의 각 원소 객체 생성
Circle c [];
c = new Circle[5];
for(int i = 0; i<c.length; i++) {
c[i] = new Circle(i);
}