자바 스터디
클래스
jedge11
2023. 10. 15. 22:16
클래스 정의하는 방법
- 기본 구조
public class ClassName { // 필드 (멤버 변수) // 생성자 // 메서드 (함수) }
<예시>
- 클래스의 이름은 대문자로 시작
- 필드는 대부분
private으로 선언하여 외부에서 직접 접근하는 것을 제한 - 필드에 접근하거나 값을 변경하려면
getter와setter메서드를 사용 - 생성자는 객체를 초기화하는 데 사용되며, 클래스 이름과 동일한 이름을 가져야 함

객체 만드는 방법 (new 키워드 이해하기)
- 기본 내용
new키워드는 자바에서 객체를 생성하는 데 사용new를 사용하여 객체를 생성하면 메모리의 힙(heap) 영역에 인스턴스가 할당됨- 이때 생성된 객체의 주소를 참조하는 참조 변수가 필요
- 이 참조 변수는 스택(stack) 영역에 저장
<예시>
new키워드는 객체를 생성하고 해당 객체를 초기화하기 위해 생성자를 호출하는 데 사용- 생성된 객체의 주소는 참조 변수에 저장되며, 이 참조 변수를 통해 객체의 메서드나 필드에 접근할 수 있음

- 중요 내용
new는 동적으로 메모리를 할당합니다. 즉, 프로그램 실행 중에 메모리가 할당됨new로 생성된 객체는 힙 영역에 저장되며, 가비지 컬렉터에 의해 자동으로 메모리가 관리- 객체에 더 이상 참조가 없으면 가비지 컬렉터에 의해 삭제
메소드 정의하는 방법
- 기본 구조
[접근 제어자] [기타 수식어] 반환타입 메서드이름(매개변수목록) { // 메서드의 본문 // ... return 반환값; // 반환타입이 void가 아닌 경우 }
- 접근 제어자 :
public,protected,private,default(아무것도 지정 x) - 기타 수식어 :
static,final,abstract - 반환 타입 :
기본 데이터 타입,참조 데이터 타입,void(아무것도 반환 x,제네릭 타입 등 - 메서드 이름 : 메서드 호출 시 사용하는 이름
ex) 스택의 push 함수 - 매개변수목록 : 메서드 호출 시 전달하는 값의 타입과 변수명
ex) 스택의 push(int value) - 메서드 본문 : 중괄호
{}안에 작성되며, 실행될 코드
<예시>
- 멤버 변수를
setter 함수를 통해서 초기화
하지만, 멤버 변수를 초기화 하는 또 다른 방법은 없을까..?
생성자 정의하는 방법
있다!! 함수 말고 생성자를 사용해서도 멤버 변수 초기화가 가능
<예시>
- 생성자의 이름은 클래스의 이름과 동일
- 생성자는 반환 타입을 가지지 않습니다. 즉, 반환값이 없는 메서드
- 생성자는
new키워드를 사용하여 객체를 생성할 때 자동으로 호출 - 클래스 내부에 생성자를 정의하지 않으면 컴파일러는 기본 생성자를 제공

this 키워드 이해하기
객체 변수와 로컬 변수의 충돌 해결

생성자에서 다른 생성자 호출
public class MyClass { private int value; public MyClass() { this(0); // 다른 생성자를 호출하여 초기화 } public MyClass(int value) { this.value = value; } }함수에서 현재 객체를 반환
public class MyClass { private int value; public MyClass setValue(int value) { this.value = value; return this; // 현재 객체를 반환하여 메서드 체이닝 가능 } }