- 클래스(class) : 객체를 만들어 내기 위한 설계도, 혹은 틀
- 객체의 속성(state)과 행동(behavior)을 포함
- 객체(instance) : 클래스의 모양 그대로 찍어낸 실체
- 프로그램 실행 중 찍어낸 실체
- 메모리 공간을 갖는 물리적인 실체
public class Circle{//public: 접근권한 class: 클래스 선언 Circle: 클래스 이름
public int radius;//필드(변수)
public Circle(){//생성자 메소드
}
public double getArea(){
return 3.14*radius*radius;//메소드
}
}
- class 키워드로 선언, {} 안에 모든 필드와 메소드 구현
- 필드 : 객체 내에 값을 저장하는 멤버 변수
- 메소드 : 함수이면 객체의 행동을 구현
- 접근 지정자 : 필드나 메소드 앞에 붙어 다른 클래스의 접근 허용을 표시
- 생성자 : 클래스의 이름과 동일한 특별한 메소드
- 객체가 생성될 때 자동으로 한 번 호출되는 메소드
- 객체를 초기화 하는데 필요한 코드 작성
객체 생성 및 접근
- 객체에 대한 레퍼런스 변수 선언
- 객체생성
- 반드시 new 키워드를 이용하여 생성(new는 객체의 생성자 호출)
- 클래스 타입 크기의 메모리 할당
- 객체 내 생성자 코드 실행
- 객체 내 멤버 접근: 객체 레퍼런스.멤버 로 접근
Circle pizza;//레퍼런스 변수 선언
pizza = new Circle();//생성자 메소드를 이용해 Circle객체 pizza 생성
pizza.radius = 10;//객체멤버(필드) 접근
double area = pizza.getArea();//객체멤버(메소드) 접근
- 생성자 : 객체(instance)가 생성될 때 초기화를 위해 실해되는 메소드
- 생성자는 메소드
- 생성자의 목적은 객체 초기화
- 생성자의 이름은 클래스의 이름과 동일
- 생성자 여러 개 작성 가능 (오버로딩)
- 생성자는 new를 통해 객체를 생성할 때, 객체당 한 번만 호출
- 생성자는 return 타입을 지정할 수 없음
- 객체가 생성될 때 반드시 호출되므로 하나 이상 선언되어야 함(생성자를 작성하지 않으면 컴파일러가 자동으로 생성자를 삽입)
- 기본 생성자(default constructor)
- 매개 변수 없고 아무 작업 없이 단순 리턴하는 생성자
- 생성자가 없는 경우, 컴파일러가 자동으로 기본 생성자를 삽입
- 개발자가 클래스에 생성자를 하나라도 작성한 경우, 자동으로 삽입되는 기본 생성자 없음
- this 레퍼런스 : 객체 자신에 대한 레퍼런스
- 컴파일러에 의해 자동으로 관리. 개발자는 사용만
- this.멤버 형태로 사용
public class Circle{
int radius;
public Circle(){this.radius = 1;}
public Circle(int radius){
this.radius = radius;//this.radius는 클래스의 멤버 변수, radius는 생성자의 매개변수
}
}
- this를 사용하는 경우
- 객체의 멤버 변수와 메소드 변수의 이름이 같은 경우
- 다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
- 메소드가 객체 자신의 레퍼런스를 반환할 때
- this()로 다른 생성자 호출
- 클래스 내의 다른 생성자 호출
- 생성자 내에서만 사용
- 반드시 생성자 코드의 제일 처음에 수행
public class Student{
int id;
String name;
public Student(){
System.out.println("생성자 호출");
this("","");//생성자의 첫번째 문장이 아니기 때문에 컴파일 오류
}
public Student(String name){
this(name,0);//String 과 int 2개를 매개변수로 받는 생성자 호출
}
public Student(String name, int id) {
this.name = name;
this.id = id;
}
}
- 객체의 치환 : 객체 복사X 객체의 레퍼런스가 복사O
public class Circle {
int radius;
public Circle(int radius) {
this.radius = radius;
}
public static void main(String[] args) {
Circle ob1 = new Circle(1);
Circle ob2 = new Circle(2);
ob1 = ob2;//값이 복사되는 것이 아니라 레퍼런스가 복사되어 같은 객체를 가리키게 된다.
}
}
- 객체 배열
Circle [] c;//클래스 배열 선언
c = new Circle[5];//클래스 배열 생성
Scanner scnr = new scanner(System.in)
for(int i=0; i<c.length; i++){//c.length는 배열의 크기->5
int r = scnr.nextInt()
c[i] = new Circle(r);//c의 각 원소 객체 생성
}
for(int i=0; i<c.length; i++){
System.out.println((c[i].getArea());//배열의 각 원소 객체 사용
}
'JAVA' 카테고리의 다른 글
[Java.2-5] static 과 final (0) | 2022.04.15 |
---|---|
[Java.2-4] 접근 지정자 (0) | 2022.04.15 |
[Java.2-3] 객체 소멸과 가비지 (0) | 2022.04.15 |
[Java.2-2] 메소드 (0) | 2022.04.15 |
[Java.1] 자바 프로그래밍 기본 (0) | 2022.04.14 |