📗 객체 배열
객체 배열 생성 및 사용
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 이어야 한다.
'Java' 카테고리의 다른 글
자바 : 상속 (0) | 2024.02.13 |
---|---|
자바 : static, final (0) | 2024.02.12 |
자바 : 생성자 (0) | 2024.02.07 |
자바 : 클래스와 객체 (0) | 2024.02.06 |
자바 : 배열과 예외 처리 (0) | 2024.02.05 |