생성자 constructor
• 객체가 생성될때, 객체의 초기화를 위해 주로 사용되는 메소드의 일종
• 모든클래스에는 생성자가 있으며, 생성자가 기술이 안되어 있으면 눈에는 안보이지만 "기본생성자"가 자동으로 아무 기능없는 형태로 만들어지고 호출된다.
초기화 3가지
실행순서 : 초기화블럭 > 생성자
✔ 생성자
인스턴스변수를 초기화하기 위함
✔ 초기화 블럭 (안드로이드 개발할때 많이 씀)
☑ 클래스블럭
static{
//코드 작성
}
☑ 인스턴스 블럭(거의안씀)
{
//코드 작성
}
✔ 명시적 초기화
바로 대입시키는 방식 ex) int a = 10;
생성자 선언 및 활용
- 객체가 생성되는 순간에 new를 통해 자동으로 단 한번만 호출된다.
- 반면, 메서드는 필요할때마다 호출가능
- 생성자의 이름은 반드시 클래스 이름과 동일
- 리턴타입 지정불가 (void 조차 작성 못함)
- but, 생성자 안에서 return; 강제종료로 키워드 사용 가능
- 매개변수는 지정가능
- 생성자는 오버로딩 할 수 있다
- 목적은 객체 생성시, 필요한 초기 작업을 위함이다.
- 필드 초기화, 필요한 메모리 확보, 파일 열기, 네트워크 연결 등 객체 활동전 필요한 초기 준비작업시 활용
생성자 구조
클래스명(){
//코드작성
}
기본 생성자 default constructor
- 매개변수와 실행코드가 없어 아무일도 안하는 생성자
- 클래스명(){}
- 클래스는 생성자가 하나이상은 반드시 존재한다.
- 객체 생성시 반드시 한번 실행
- 클래스안에 작성된 생성자가 하나도 없으면, 컴파일러가 자동으로 내용이 없는 기본생성자를 추가한다.
✔ 기본생성자가 생성되는 경우
생성자가 하나도 없을 경우
✔ 기본생성자가 자동으로 생성되지 않는 경우
매개변수를 가진 생성자가 클래스안에 작성되어 있을경우, 컴파일러는 더이상 기본생성자를 자동으로 만들어주지 않는다.
this
this 레퍼런스
- 객체 자기 자신을 가르키는 레퍼런스이다.
- 현재 실행되고 있는 메서드가 속한 객체에 대한 레퍼런스이다.
- 컴파일러에 의해 자동으로 관리됨
- 인스턴스 메서드나 생성자에서 사용됨 (static에는 사용 불가, 객체가 없기때문에)
this의 필요성
- 지역변수나 매개변수가 인스턴스변수의 이름과 같은 경우 구별하려는 목적으로 사용
- 메서드가 객체 자기자신의 레퍼런스를 리턴해야하는 경우 사용
this()
- 클래스내의 생성자가 다른 생성자를 호출할 때 사용
- 생성자 안에서만 사용 가능
- 생성자 안에서 다른 생성자의 기능이 필요할 때 사용
- 생성자가 두개 이상일 경우 사용가능 (생성자 오버로딩)
- 다른 생성자 호출 시, 반드시 생성자의 첫번째 문장이 되어야 한다.
- 코드 재사용성을 높이는 방법
객체 배열
배열은 기본타입뿐만아니라 객체를 요소로 하는 객체 배열도 만들수 있다.
객체에 대한 레퍼런스(주소)를 요소로 갖는 배열
배열 선언 및 생성
- 배열에 대한 레퍼런스 변수 선언
- 클래스명 [] 변수명;
- 배열 생성
- 변수명 = new 클래스명[개수];
- 객체 생성
- for(int i = 0; i<변수명.length; i++{
- 변수면[i] = new 클래스명();
- }
배열의 요소 객체 접근
- 배열명[인덱스].변수명
- 배열명[인덱스].메서드()
✍🏻ex.
int [] arr = new int[5]; // int타입의 방 5개짜리 배열 생성
arr[0] = 10;
Tv [] tvarr = new Tv[5]; // Tv타입의 방 5개짜리 배열 생성
tvArr[0] = new tv();
객체의 소멸
- 자바에서는 객체를 생성하는 new 연산자는 있지만 객체를 소멸시키는 연산자는 없다.
- → 개발자가 마음대로 객체 소멸시킬 수 없다.
- 객체 소멸 : new에 의해 생성된 객체 공간을 JVM에게 다시 돌려주어 가용 메모리에 포함시키는것
- 자바에서는 감사하게도 이러한 사용되지 않는 객체 메모리(가비지)를 JVM의 가비지컬렉터(Gaebage Collector)가 적절한 시점에 자동으로 수거하여 메모리를 해제 시킨다.
💡가비지
더이상 사용되지 않는 객체나 배열 메모리를 칭함
참조하는 레퍼런스가 하나도 없는 객체나 배열을 가비지로 판단
✍🏻ex)
a = new Person("피카츄")
b = new Person("꼬북이")
b = a
→ b 레퍼런스 변수가 가르키던 "꼬북이" 객체는 이제 가비지가 된다.
가비지 컬렉션 (Garbage Collection)
- 가비지가 많으면 사용할 수 있는 가용 메모리가 줄어든다 > 메모리 부족하면 프로그램 실행X →자바 플랫폼은 가용 메모리가 일정 크기 이하로 줄어들면 자동으로 가비지 회수한다. 이를 가비지 컬렉션이라고 함
- 가비지 컬렉션은 가비지 컬렉션 스레드에 의해 처리된다. (스레드 = 일꾼)
- 자바 플랫폼 내부의 판단에 의해 실행되므로 언제 가비지 컬렉션이 수행되는지 알기 어렵다.
- 단점 : 가비지 컬렉터가 실행되면 응용 프로그램은 실행을 멈추고 기다린다.
- → 실시간 처리 응용 프로그램으로 부적합
- 강제 요청은 System 또는 Runtime 객체의 gc() 메소드를 호출하면 요청할 수 있으나 그러나 즉시 작동하지는 않는다.
접근지정자 modifier
객체 지향 언어는 접근지정자를 두고 있다. 객체를 캡슐화하기 때문에, 객체에 다른 객체가 접근하는것을 허용할지 말지를 지정할 필요가 있기 때문에
💡패키지 package
자바는 서로 관련있는 클래스 파일들을 패키지에 저장하여 관리
디렉토리 or 폴더 개념
자바의 4가지 접근 지정자
✔ 클래스 접근 지정자
다른 클래스에서 이 클래스 활용할 수 있는지 허용 여부 지정
- public 클래스
- 패키지에 상관없이 다른 어떤 클래스에서도 사용이 허용됨 (전체공개)
- public class 클래스명{...}
- default 클래스
- 같은 패키지내의 클래스들에게만 사용이 허용됨
- (접근지정자 생략)class 클래스명{...}
✔ 멤버(클래스 안에 있는 변수나 메소드) 접근 지정
변수, 메소드에 직접 공개 여부(범위) 지정
private < default < protected < public 순으로 공개범위 넓어짐
멤버에 접근하는 클래스 | 멤버 접근 지정자 | |||
private | default | protected | public | |
같은 패키지의 클래스 | X | O | O | O |
다른 패키지의 클래스 | X | X | X | O |
접근 가능 영역 | 클래스내 | 동일패키지내 | 동일패키지와 자식 클래스 |
모든 클래스 |
1. public 멤버
- 모든 클래스에서 접근 가능
- public 타입 변수명
- public 리턴타입 메서드명(){ ... }
2. private 멤버
- 비공개, 클래스 내의 멤버들에게만 접근 허용
- private 타입 변수명
- private 리턴타입 메소드명(){ ... .}
3. protected 멤버
- 보호된 공개, 같은 패키지의 모든 클래스와 다른패키지의 자식클래스 > 상속유도
- protected 타입 변수명
- protected 리턴타입 메소드명(){ ... .}
4. default 멤버 (접근 지정자 생략)
- 같은 패키지내 클래스들에게 접근 허용
- 타입 변수명
- 리턴타입 메소드명(){ ... }
캡슐화 incaptulation 자바가 추구하는 코딩 형태
데이터를 보관하는 변수에 접근을 하기 위해서는 메소드를 이용하여 우회 접근 하도록하여, 데이터의 공개를 막고 적합한 가공과 검증을 통하여 데이터에 접근하도록 유도하는 방식
변수 : private 메소드 : public
☑ getter : 데이터 꺼내기 : get변수명( ) 이때 변수명 첫글자는 대문자로 작성
☑ setter : 데이터 저장 : set변수명() 이때 변수명 첫글자는 대문자로 작성
✍🏻ex)
'basic > java 이론' 카테고리의 다른 글
day 13 - 상속과 생성자, 메소드 오버라이딩, 다형성 (0) | 2021.05.10 |
---|---|
day 12 - 상속 inheritance (0) | 2021.05.07 |
day 10 - jvm 메모리 구조, 메서드 인자 전달 방식, 메서드 오버로딩 (0) | 2021.05.04 |
day 09 - 메소드 (method) (0) | 2021.05.03 |
day08 - [객체지향,class,객체,변수의종류[클래스변수,인스턴스변수,지역변수]] (0) | 2021.04.30 |