전공/객체지향프로그래밍

[객체지향프로그래밍][Java] 클래스와 객체 1 (클래스의 구성, 생성자, this, 객체 배열, 오버로딩, 가비지 컬렉션)

Campus Coder 2023. 4. 18. 02:14
728x90
반응형

클래스의 구성

public class Circle { // public: 접근 권한, class 클래스 선언, Circle 클래스 이름
	public int radius; // 원의 반지름 필드
    public String name; // 원의 이름 필드
    
    public Circle() { //원의 생성자 메소드
    }
    public double getArea() { // 원의 면적 계산 메소드
    	return 3.14*radius*radius;
    }

클래스 선언, class Circle

  • class 키워드로 선언
  • 클래스는 { } 안에 모든 필드와 메소드 구현
  • class Circle은 Circle 이름의 클래스 선언
  • 클래스 접근 권한, public -> 다른 클래스들에서 Circle 클래스를 사용하거나 접근할 수 있음을 선언

 

필드와 메소드

  • 필드 - 객체 내에 값을 저장하는 멤버 변수
  • 메소드 - 함수이며 객체의 행동(행위)을 구현

 

필드의 접근 지정자, public

  • 필드나 메소드 앞에 붙어 다른 클래스의 접근 허용을 표시
  • public 접근 지정자: 다른 모든 클래스의 접근 허용

 

생성자

  • 클래스의 이름과 동일한 특별한 메소드
  • 객체가 생성될 때 자동으로 한 번 호출
  • 개발자는 객체를 초기화하는데 필요한 코드 작성

 

객체 생성 및 접근

객체 생성

반드시 new 키워드를 이용하여 생성

- new는 객체의 생성자 호출

 

객체 생성 과정

객체에 대한 레퍼런스 변수 선언

객체 생성

- 클래스 타입 크기의 메모리 할당

- 객체 내 생성자 코드 실행

 

객체의 멤버 접근

객체 레퍼런스.멤버

 

생성자의 특징

  • 생성자는 메소드
  • 생성자 이름은 클래스 이름과 동일
  • 생성자 여러 개 작성 가능 (오버로딩)
  • 생성자는 new를 통해 객체를 생성할 때, 객체당 한 번 호출
  • 생성자는 리턴 타입 지정할 수 없음
  • 생성자의 목적은 객체 초기화
  • 생성자는 객체가 생성될 때 반드시 호출됨 - 생성자 작성하지 않을 시, 기본 생성자 자동 생성

 

기본 생성자

- 매개 변수 없고 아무 작업 없이 단순 리턴하는 생성자

- 디폴트 생성자라고도 함

- 생성자 작성하지 않을 시, 컴파일러가 기본 생성자 자동 생성

- 개발자가 클래스에 생성자가 하나라도 작성한 경우 -> 기본 생성자 자동 삽입되지 않음

 

this레퍼런스

객체 자신에 대한 레퍼런스

- this.멤버 형태로 멤버 사용

 

this의 필요성

  • 객체의 멤버 변수와 메소드 이름이 같은 경우
  • 다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
  • 메소드가 객체 자신의 레퍼런스를 반환할 때

 

this()로 다른 생성자 호출

  • 클래스 내의 다른 생성자 호출
  • 생성자 내에서만 사용 가능
  • 반드시 생성자 코드의 제일 처음에 수행

 

객체의 치환

ob1 = ob2; // ob1, ob2는 객체 레퍼런스

객체가 복사되는 것이 아닌 레퍼런스가 복사

 

객체 배열

Circle [] c;
c = new Circle[5]; // 레퍼런스 배열 생성

for(int i=0; i<c.length; i++) // c.length는 배열 c의 크기 -> 5
    c[i] = new Circle(i); // 배열의 각 원소 객체 생성

 

메소드 형식

메소드

- 클래스의 멤버 함수, C/C++의 함수와 동일

- 자바의 모든 메소드는 반드시 클래스 안에 있어야 함(캡슐화 원칙)

 

메소드 구성 형식

- 접근 지정자 -> public, private, protected, 디폴트(접근 지정자 생략 시)

- 리턴 타입 -> 메소드가 반환하는 값의 데이터 타입

 

인자 전달

기본 타입의 값 전달

- 값이 복사되어 전달

- 메소드의 매개변수가 변경되어도 호출한 실인자 값은 변경되지 않음

 

객체 혹은 배열 전달

- 객체나 배열의 레퍼런스만 전달(복사 x)

- 메소드의 매개변수와 호출한 실인자 객체나 배열 공유

 

메소드 오버로딩

이름이 같은 메소드 작성

- 매개변수의 개수나 타입이 서로 다름

- 이름이 동일함

 

리턴 타입은 오버로딩과 무관

 

객체의 소멸과 가비지 컬렉션

객체 소멸

new에 의해 할당된 객체 메모리를 자바 가상 기계의 가용 메모리로 되돌려 주는 행위

 

자바 응용프로그램에서 임의로 객체 소멸 불가

객체 소멸은 자바 가상 기계의 고유한 역할

 

가비지

가리키는 레퍼런스가 하나도 없는 객체 -> 사용할 수 없게 된 메모리

 

카비지 컬렉션

자바 가상 기계의 가비지 컬렉터가 자동으로 가비지 수집 반환

- 자바에서 가비지를 자동 회수하는 과정

- 가비지 컬렉션 스레드에 의해 수행

 

강제 가비지 컬렉션

System.gc() // 가비지 컬렉션 작동 요청
728x90
반응형