생성자
생성자의 특징
• 메소드이다.
• 객체당 한 번 호출된다.
• 리턴타입을 지정할 수 없다
• 목적은 객체의 초기화이다. 생성자는 객체가 생성될 때 반드시 호출된다.
• 개발자가 생성자를 생성하지 않았다면 컴파일러가 자동으로 기본 생성자 삽입한다.
기본 생성자
매개 변수 없고 아무 작업 없이 단순 리턴하는 생성자
- 컴파일러가 만든다
- 하지만 개발자가 클래스 생성자를 하나라도 작성한 경우 컴파일로는 기본 생성자를 만들지 않는다.
this 레퍼런스
▶︎ this
- 객체 자신에 대한 레퍼런스
▶︎ this()
- 클래스 내의 다른 생성자 호출
- 생성자 내에서만 사용가능
- 반드시 생성자 코드의 제일 처음에 수행
public class Book{
String title;
String author;
public Book(){
this("", "") // 같은 클래스내에 다른 생성자를 호출
}
public Book(String title){
this(title, "작자미상");
}
public Book(String title, String author){
this.title = title; this.author = author;
}
public static void main(String [] args){
Book littlePrince = new Book("어린왕자", "생택쥐페리");
Book loveStory = new Book("춘향전");
}
}
객체 배열
1 Circle [] c; // 레퍼런스 변수 c 선언
2 c = new Circle[5]; // 레퍼런스 배열 생성
3 for(int i=0; i<5; i++){
c[i] = new Circle(i); // 배열의 각 원소 객체 생성
}
- 2 : 레퍼런스 배열이 생성된다. 주소값을 저장하기위한 5개의 메모리 공간이 할당된다.
- 3 : 각 원소의 객체가 생성된다.
메소드 형식
▶︎ 메소드
- 클래스의 멤버 함수
- 자바의 모든 메소드는 반드시 클래스 안에 있어야 한다. (캡슐화 원칙)
▶︎ 메소드 구성 형식
- 접근 지정자 : public, private, protected, 디폴트 (접근 지정자 생략된 경우)
- 리턴 타입
인자 전달
경우 1. 기본 타입의 값 전달
- 값이 복사되어 전달 (call by value)
- 값이 별개로 취급됨
경우 2. 객체 혹은 배열 전달
- 객체나 배열의 레퍼런스만 전달
- 객체나 배열을 공유하게 됨
메소드 오버로딩(Overloading)
오버로딩
이름이 같은 메소드 작성할 수 있다.
▶︎ 오버 로딩 조건
- 매개변수의 개수가 다르다
- 매개변수의 타입이 다르다.
- 함수의 이름이 동일하다.
public class MethodSample{
// 오버로딩 성공
public int getSum(int i, int j){
return i+j;
}
// 오버로딩 성공
public int getSum(int i, int j, int k){
return i+j+k;
}
// 오버로딩 성공
public int getSum(double i, double j){
return i+j;
}
}
리턴 타입은 오버로딩과 관련 없음
- 리턴타입만 다르면 오버로딩 샐패
- 컴파일이 구분 못함 -> 공존 불가
객체 소멸과 가비지 컬렉션
▶︎ 객체 소멸
- new에 의해 할당된 객체 메모리르 자바 가상 기계의 가용 메모리로 되돌려 주는 행위
자바 응용 프로그램에서 임의 객체 소멸할 수 없음
- 객체 소멸은 JVM의 고유한 역할
▶︎ 가비지
- 가리키는 레퍼런스가 하나도 없는 객체
- 모든 객체 안에 reference count 변수가 있다. 복사할 때 count 증가
▶︎ 가비지 컬렉션
- 가비지 컬렉터가 자동으로 가비지 수집 반환
접근 지정자
▶︎ 목적
- 멤버 보호
▶︎ 클래스 접근지정
public class Word{} // public class
class Local{} // 디폴트 클래스
- 다른 클래스에서 사용하도록 허용할지 지정
- public 클래스
- 다른 모든 클래스에게 접근 허용
- 디폴트 클래스
- Package-private
- 같은 패키지의 클래스에만 접근 허용
▶︎ 멤버 접근 지정
- public : 누구든지 접근 가능 (다른 패키지도 가능)
- private : 본인 클래스가 아니면 접근 불가 (같은 패키지도 불가)
- 디폴트 : 같은 패키지에 있는 다른 클래스에서 접근 가능
- protected : 같은 패키지 + 다른 패키지라도 상속받으면 가능
'CS > 자바' 카테고리의 다른 글
[Java] 제네릭 - Generic (1) | 2024.12.03 |
---|---|
자바 #6 - static과 final (1) | 2024.02.13 |
자바 #4 - 객체지향 언어의 특징 (0) | 2024.02.07 |
자바 #3 - 자바의 배열과 예외 처리 (1) | 2024.02.04 |
자바#2 - 자바의 데이터 타입과 입력 (1) | 2024.02.04 |