public class Circle{
//field(변수)
public int radius;
public String name;
//메소드
public Circle(){
}
public double getArea(){
return 3.14*radius*radius;
}
}
객체는 클래스를 바탕으로 메모리(Heap 영역)에 실제로 생성된 실체 new 키워드를 사용하여 생성, 객체의 주소값을 저장하는 참조 변수(Reference Variable)를 통해 사용됨
참조 변수 선언: Circle pizza; (Circle 객체의 주소를 담을 변수 선언)
객체 생성: pizza = new Circle(); (new로 Circle 객체를 Heap 메모리에 생성하고 주소값을 pizza 변수에 할당)
객체 멤버 접근: pizza.radius = 10; (. 연산자를 사용하여 객체의 필드나 메소드에 접근)
new 연산자로 객체를 생성할 때 호출, 객체의 필드를 초기화
생성자의 이름은 클래스 이름과 반드시 동일해야 함
리턴 타입을 지정하지 않음 (void도 사용 불가).
여러 개 작성 가능 (생성자 오버로딩)
기본 생성자 (Default Constructor): 클래스에 생성자가 하나도 정의되지 않은 경우, 자바 컴파일러가 매개변수 없는 빈 생성자를 자동으로 추가
1) this 참조 변수
생성된 객체 자기 자신을 가리키는 참조 변수
멤버 변수와 지역 변수 이름이 같을 때 구분: this.member = member;
메소드에서 객체 자신의 참조 값을 반환할 때: return this;
public class Circle {
private int radius;
public Circle(int radius) { // 매개변수 radius와 필드 radius 이름이 동일
this.radius = radius; // this.radius는 필드, radius는 매개변수를 의미
}
}
2) this() 메소드
같은 클래스 내의 다른 생성자를 호출할 때 사용
반드시 생성자 코드의 첫 줄에 작성.
주로 코드 중복을 피하기 위해 사용
public class Circle {
private int radius;
private String name;
public Circle() {
this(1, "이름없음"); // 매개변수 2개인 다른 생성자를 호출
}
public Circle(int radius, String name) {
this.radius = radius;
this.name = name;
}
}
객체 타입 변수에 다른 객체 변수를 할당하면, 객체 자체가 복사되는 것이 아니라 객체의 주소(참조)가 복사
따라서 두 변수는 메모리상의 동일한 객체를 가리키게 됨
Circle c1 = new Circle(10);
Circle c2 = c1; // c1의 주소값을 c2에 복사
c2.radius = 20;
System.out.println(c1.radius); // 출력: 20 (c1과 c2는 같은 객체를 가리킴)
객체에 대한 참조 변수들을 모아놓은 배열. 배열 생성 후, 각 배열 요소에 객체를 생성하여 할당해야 함.
Circle[] c = new Circle[5]; // 5개의 Circle 참조를 저장할 배열 생성
for (int i = 0; i < c.length; i++) {
c[i] = new Circle(i); // 배열의 각 요소에 새로운 Circle 객체를 생성하여 할당
}
기본 타입(Primitive Type) 값 전달: int, double, char 등
Call by Value: 메소드에 인자로 전달될 때, 변수의 값이 복사되어 전달. 따라서 메소드 내에서 매개변수 값을 변경해도 원래 변수에는 영향 x.
객체 또는 배열(Reference Type) 전달:
Java에서는 개발자가 직접 메모리를 해제하지 않음. 가비지 컬렉터(Garbage Collector)가 주기적으로 Heap 메모리를 검사하여, 더 이상 어떤 참조 변수도 가리키지 않는 객체를 찾아내어 메모리에서 자동으로 제거
이정도면 중간고사 만점 가능하다