본문 바로가기

Java

자바 : 객체 배열과 메소드

728x90

 

📗 객체 배열

객체 배열 생성 및 사용

Class Circle{

    변수와 메소드 들...

}


Circle [] c; // Circle 배열에 대한 레퍼런스 변수 c 선언
c = new Circle[5]; // 레퍼런스 배열 생성

for(int i = 0; i<c.length; i++){
    c[i] = new Circle(); // 배열의 각 원소 객체 생성
}

 

 

 

 

📗 메소드 형식

✅메소드

클래스의 멤버 함수

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

 

✅메소드 구성 형식

접근 지정자

- public, private, protected, 디폴트 (접근 지정자가 생략된 경우)

 

리턴 타입

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

 

✅자바의 인자 전달 방식

1. 기본 타입의 값 전달

- 값이 복사되어 전달된다. (call by value)

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

 

int n = 10; // n의 값은 10

increase(n);

System.out.println(n); // n의 값은 10

// 실인자는 변경되지 않는다.


static void increase(int n){

    n = n+1; // n의 값은 11
    
}

 

 

2. 객체 혹은 배열 전달

- 객체나 배열의 레퍼런스만 전달 (객체 혹은 배열을 넘기는 것이 아님)

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

 

class Circle{

    private radius;
    
    public Circle(int radius){
        this.radius = radius;
    }

}

static void increase(Circle circle){
    circle.radius++; // radius = 11
}

Circle donut = new Circle(10); // radius = 10
increase(donut); 
System.out.println(donut.radius); // radius = 11

 

 

✅메소드 오버로딩

자바에서는 이름이 같은 메소드를 여러개 만들 수 있음

- 매개변수 개수가 다르고

- 이름이 동일하면 가능

- 리턴 타입은 오버로딩과 상관없다

 

// 오버로딩 성공 사례

class Overloading{

    public int getSum(int i, int j);
    public int getSum(String str, int i);
    public int getSum(int i, int j, int k);
}


// 오버로딩 실패 사례

class Overloading{

    public int getSum(int i, int j);
    public String getSum(int i, int j);
}

 

 

 

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

✅객체 소멸

new에 의해 할당된 객체 메모리를 JVM의 가용 메모리로 되돌려 주는 행위

 

- 자바에서는 임의로 객체를 소멸시킬 수 없음

- 객체 소멸은 JVM의 고유한 역할

 

✅가비지

가리키는 레퍼런스가 하나도 없는 객체

-> 누구도 사용할 수 없게 된 메모리

 

Person a, b;

a = new Person("손흥민");
b = new Person("페이커");

// b = a로 b를 가리키는 레퍼런스가 하나도 없게 됨
b = a; // b가 가리키던 객체는 '가비지'가 됨

 

✅가비지 컬렉션

JVM의 가비지 컬렉터가 자동으로 가비지 수집, 반환 -> 가용 메모리로 반환

 

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

 

- 개발자에 의한 강제 가비지 컬렉션

System.gc(); // 가비지 컬렉션 작동 요청

 

 

📗 패키지

관련 있는 클래스 파일을 저장하는 디렉토리

자바 응용프로그램은 하나 이상의 패키지로 구성된다.

📗 자바의 접근 지정자

private, public, protected, 디폴트가 존재함

 

✅접근 지정자의 목적

클래스나 일부 멤버를 공개하여 다른 클래스에게 접근을 허용

객체 지향 언어의 캡슐화 정책은 멤버를 보호하는 것

접근 지정자를 이용해 캡슐화의 묶인 보호를 일부 해제할 목적도 있다.

 

 

✅클래스 접근 지정

다른 클래스에서 사용하도록 허용할 지 지정하는 것

 

- public

다른 모든 클래스에서 접근을 허용

 

- private

오직 같은 클래스 안에 멤버들만 접근을 허용

 

- default 

package - private 라고도 한다.

같은 패키지의 클래스에게만 접근 허용

 

- protected

같은 패키지 내에서 접근 가능

패키지 내부 혹은 외부에 protected 클래스를 상속을 받은

클래스가 있다면 접근 가능, 단 상속을 한 부모 클래스의

지정자가 public 이어야 한다.

 

 

 

 

 

 

728x90
반응형

'Java' 카테고리의 다른 글

자바 : 상속  (0) 2024.02.13
자바 : static, final  (0) 2024.02.12
자바 : 생성자  (0) 2024.02.07
자바 : 클래스와 객체  (0) 2024.02.06
자바 : 배열과 예외 처리  (0) 2024.02.05