1 ) 기본형 & 참조형 변수
- 기본형 매개변수 : 메서드를 호출할 때 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달
- 매개변수의 타입이 기본형일 때는 값 자체가 복사되어 넘어가기 때문에 매개값으로 지정된 변수의 원본 값이 변경되지 않음.
- 참조형 매개변수 : 메서드를 호출할 때 전달한 매개값으로 지정한 값의 주소를 매개변수에 복사해서 전달.
- 매개변수를 참조형으로 선언하면 값이 저장된 곳의 원본 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 변경 가능.
- 메서드의 매개변수뿐만 아니라 반환 타입도 참조형이 될 수 있습니다.
- 반환 타입이 참조형이라는 것은 반환하는 값의 타입이 "실제 값의 주소" 라는 의미
2 ) 인스턴스 멤버와 클래스 멤버
- 멤버 = 필드 + 메서드
- 인스턴스 멤버 = 인스턴스 필드 + 인스턴스 메서드
- 클래스 멤버 = 클래스 필드 + 클래스 메서드
- 인스턴스 멤버 & 클래스 멤버
- 필드와 메서드는 선언하는 방법에 따라서 인스턴스 멤버와 클래스 멤버로 구분할 수 있다.
- 인스턴스 멤버는 객체 생성 후에 사용할 수 있고 클래스 멤버는 객체 생성 없이도 사용할 수 있다.
인스턴스 멤버
- 인스턴스 멤버는 객체를 생성해야 사용할 수 있다.
- 객체의 인스턴스 필드는 각각의 인스턴스마다 고유하게 값을 가질 수 있다.
- 그렇다면 객체가 인스턴스화할 때 마다 객체의 메서드들은 인스턴스에 포함되어 매번 생성이 될까?
- NO! 매번 저장한다면 중복 저장으로 인해 메모리 효율이 매우 떨어지기 때문에 메서드는 메서드 영역에 두고서 모든 인스턴스들이 공유해서 사용.
- 대신 무조건 객체를 생성 즉, 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한을 걸어 둔 것.
클래스 멤버
- Java의 클래스 로더에 의해 메서드 영역에 저장되고 사용된다.
- 이때 클래스 멤버란 메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버를 의미
- 따라서 클래스 멤버는 객체의 생성 필요 없이 바로 사용이 가능합니다.
- 선언
- 필드와 메서드를 클래스 멤버로 만들기 위해서는 static 키워드를 사용하면 된다.
- 일반적으로 인스턴스마다 모두 가지고 있을 필요 없는 공용적인 데이터를 저장하는 필드는 클래스 멤버로 선언.
- 또한 인스턴스 필드를 사용하지 않고 실행되는 메서드가 존재한다면 static 키워드를 사용하여 클래스 메서드로 선언.
- 주의할 점!
- 클래스 멤버로 선언된 메서드는 인스턴스 멤버를 사용할 수 없다.
- 반대로 인스턴스 멤버로 선언된 메서드는 클래스 멤버를 사용할 수 있다.
- 클래스 멤버는 객체 생성 없이 바로 사용 가능하기 때문에 객체가 생성되어야 존재할 수 있는 인스턴스 멤버를 사용할 수 없다.
- 필드와 메서드를 클래스 멤버로 만들기 위해서는 static 키워드를 사용하면 된다.
- 지역 변수
- 메서드 내부에 선언된 변수.
- 메서드가 실행될 때 마다 독립적인 값을 저장하고 관리
- 지역 변수는 메서드 내부에서 정의될 때 생성되어 메서드가 종료될 때 까지만 유지.
- final 필드와 상수
- '최종적'이라는 의미
- final 필드는 초기값이 저장되면 해당값을 프로그램이 실행하는 도중에는 절대로 수정할 수 없다.
- 또한 final 필드는 반드시 초기값을 지정해야 합니다.
- 필드 앞에 final 키워드를 추가하여 사용 ( 일반적인 인스턴스 필드 사용방법 동일)
- 상수
- 상수의 특징은 값이 반드시 한 개이며 불변의 값을 의미.
- 따라서 인스턴스마다 상수를 저장할 필요가 없다.
- 일반적으로 상수는 대문자로 작성.
- 사용방법은 일반적인 클래스 필드와 동일.
- '최종적'이라는 의미
3 ) 생성자
- 생성자는 객체가 생성될 때 호출되며 객체를 초기화하는 역할을 수행합니다.
public Car() {} // 선언
...
Car car = new Car(); // 호출
- 생성자는 반환 타입이 없고 이름은 클래스의 이름과 동일
- new 연산자에 의해 객체가 생성되며 Car(); 즉, 생성자가 호출
- 기본 생성자 - 선언할 때 괄호( ) 안에 아무것도 넣지 않는 생성자를 의미합니다.
- 필드 초기화 - 생성자는 객체를 초기화하는 역할을 수행합니다.
- 주의할 점! 생성자를 통해 필드 값을 초기화하고 기본 생성자를 작성하지 않았는데 기본 생성자를 호출하면?
public Car(String modelName, String colorName, double priceValue) {
model = modelName;
color = colorName;
price = priceValue;
}
...
Car car = new Car(); // 오류 발생
- 한 개 이상의 생성자가 존재하기 때문에 컴파일러가 자동으로 기본 생성자를 추가해 주지 않기 때문에 기본 생성자가 존재하지 않아 오류가 발생한다.
- 생성자 오버로딩 - 생성자를 통해 필드를 초기화할 때 오버로딩을 적용할 수 있다.
- 예를 들어 우리가 자동차를 생성할 때 모델, 색상, 가격이 다른 자동차를 여러 대 생성할 수도 있고 색상만 다른 자동차를 여러 대 생성할 수도 있기 때문에 오버로딩을 사용하면 이를 효율적으로 처리 가능.
- 주의 할 점! 오버로딩을 할 때 개수, 타입, 순서가 동일한데 매개변수명만 다르게 하는 경우는 오버로딩 규칙에 위배되기 때문에 오류가 발생한다!
- 예를 들어 우리가 자동차를 생성할 때 모델, 색상, 가격이 다른 자동차를 여러 대 생성할 수도 있고 색상만 다른 자동차를 여러 대 생성할 수도 있기 때문에 오버로딩을 사용하면 이를 효율적으로 처리 가능.
public Car(String modelName, String colorName, double priceValue)
public Car(String colorName, String modelName, double priceValue)
- String, String, double : 매개변수의 개수, 타입, 순서가 동일하기 때문에 중복이 불가능.
'TIL > Java' 카테고리의 다른 글
TIL 2024-10-23 (숫자 야구 게임 - 3) (1) | 2024.10.23 |
---|---|
TIL 2024-10-16 (Java 종합만 문법) (2) | 2024.10.16 |
TIL 2024-10-15 (Java 문법 종합반) (2) | 2024.10.15 |
TIL 2024-10-14 (Java 문법 종합반) (2) | 2024.10.14 |
TIL 2024-10-11 (Java 문법 종합반) (0) | 2024.10.11 |