안 씀/java-개념

클래스와 객체

unhyepnhj 2024. 5. 14. 15:31

클래스

- 객체를 만들기 위한 설계도 or 틀

- 객체의 속성(state)과 행동(behavior) 포함

 

객체

- 클래스 모양 그대로 생성된 실체

- 프로그램 실행 중 생성

- 메모리 공간을 가짐

- =인스턴스(instance)

- 객체들은 클래스에 선언된 동일한 속성을 가지지만, 객체마다 서로 다른 고유한 값으로 구분


 

클래스 구성

원을 추상화한 클래스 Circle 코드

- class 키워드를 사용하여 선언

- 클래스의 구성 요소를 멤버라 함

- 멤버는 필드(멤버 변수)와 메소드(멤버 함수) 두 가지

 

클래스 선언

- class 키워드로 선언

- { 로 시작하여 } 로 닫으며 중괄호 안에 모든 필드와 메소드 구현

- class Circle은 Circle이라는 이름의 클래스를 선언

- public, private 등 접근 지정자로 접근 권한 표시

 

필드와 메소드

- 필드(field): 객체 내에 값을 저장하는 멤버 변수

- 메소드(method): 함수, 객체의 행동을 구현

 

접근 지정자

- public, protected, private, default

- 다른 클래스에서 활용이나 접근이 가능한지 여부 선언

- 접근 지정자를 표기하지 않으면 default

 

생성자(constructor)
- 클래스의 이름과 동일한 이름의 메소드

- 객체가 생성될 때 자동으로 한 번 호출되는 특별한 메소드

- 개발자는 객체를 초기화하는 데 필요한 코드를 작성


new 연산자와 객체 생성, 레퍼런스

public static void main(String args[]){
	Circle pizza;			//Circle 객체에 대한 레퍼런스 변수 pizza 선언
    pizza = new Circle();		//Circle 객체 생성
    
    pizza.radius = 10;			//radius 필드에 10 저장
    pizza.name = "자바피자";		//name 필드에 "자바피자" 저장
    double area = pizza.getArea();	//pizza 객체의 면적 계산하는 메소드 호출
}

레퍼런스 변수 선언

- 객체를 생성하기 전 객체를 가리킬 레퍼런스 변수를 먼저 선언

- 변수는 [클래스]타입의 객체를 가리킴

Circle pizza;		//Circle 타입의 레퍼런스 변수 newCircle 선언

- 위 선언문만으로 Circle 타입의 객체가 생성되지 않음

- 변수 newCircle은 Circle 클래스의 객체에 대한 주소(=레퍼런스)를 가지는 변수일 뿐 객체 자체는 아님

- 레퍼런스 변수만 생성되고 null로 초기화

 

객체 생성, new 연산자 이용

- 반드시 new 연산자를 사용하여 객체 생성

pizza = new Circle();

- 생성된 Circle 객체의 레퍼런스를 newCircle 변수에 대입

- Circle 타입 크기의 메모리가 할당된 수 Circle() 생성자 코드 실행

Circle pizza = new Circle();		//변수 선언과 객체 생성 동시에 가능

객체 멤버 접근

- 객체의 멤버에 접근할 때는 레퍼런스 변수 뒤에 점(.) 연산자를 붙임

- (레퍼런스.멤버) 형태

pizza.radius = 10;			//pizza 객체의 radius 필드에 10 대입
int r = pizza.radius;			//변수 r에 pizza.radius의 값인 10 저장
double area = pizza.getArea();		//pizza.getArea() 메소드 호출하여 area 변수에 저장

예제 4-1 반지름과 이름 필드, 면적을 계산하는 메소드를 멤버로 가진 Circle 클래스를 작성하고 Circle 클래스의 객체를 생성하는 프로그램 작성

 

예제 4-2 너비와 높이를 입력받아 사각형의 면적을 출력하는 프로그램 작성