• 클래스(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

+ Recent posts