private, 보안성이 향상됨, 콤포넌트의 독립성이 보장됩니다. 독립성이 요구되는 WEB관련 프로그램에서는 private 제한자가 아주 많이 사용됩니다.
콤포넌트간 간섭을 최소화하여 독립성을 유지할 수 있습니다.
private변수는 해당클래스안에서만 접근할 수 있습니다. 따라서 이 변수에 접근하려면 public 형태의 메소드를 이용해야 합니다.
데이터 은닉 및 캡슐화에 사용됩니다.
private 멤버 변수
private 멤버 변수(전역변수, 인스턴스 변수)에 값을 할당하고 가져오기(★)
입력되는 값을 검증하여 입력합니다.
외부에서 변수의 값을 마음대로 조작할 수 없음으로 안정적인 프로그램을 구현할 수 있습니다.
Data.java
//데이터 클래스
class Data{
//인스턴스 변수, 멤버 변수
private String name=null;
private String season=null;
private int year = 0;
//set으로 시작하는 메소드는 setter라고 부릅니다.
//set은 소문자로, 연결되는 변수명의 첫자는 대문자를 사용합니다.
//private변수에 값을 대입하는 목적을 가지고 있습니다.
//값을 저장함으로 리턴타입은 void를 이용합니다.
public void setName(String name){
this.name = name;
}
public void setSeason(String season){
this.season = season;
}
public void setYear(int year){
if (year >= 20 && year <= 30){
this.year = year;
}else{
System.out.println("입력될 수 있는 나이는 20~30세 사이입니다.");
}
}
//get으로 시작하는 메소드는 getter라고 부릅니다.
//get은 소문자로, 연결되는 변수명의 첫자는 대문자를 사용합니다.
//private변수에서 값을 가져오는 목적을 가지고 있습니다.
//값을 가져옴으로 값에 따른 다양한 데이터타입을 지정합니다.
public String getName(){
return name;
}
public String getSeason(){
return season;
}
public int getYear(){
return year;
}
}
DataAccess.java
//데이터 이용 클래스publicclassDataAccess {publicstaticvoidmain(String[] args) {Data d =newData();//d.name="왕눈이";//System.out.println(d.name);d.setName("왕눈이");d.setSeason("늦가을");d.setYear(35);System.out.println(d.getName());System.out.println(d.getSeason());System.out.println(d.getYear());}}
private method 응용
- private 메소드가 존재하면 반드시 private 메소드를 호출하는 public메소드가
존재하게되어 있습니다.
- private 메소드는 클래스 외부에서 호출될 수 없습니다.
- 거대한 하나의 메소드를 여러개의 메소드로 분리한후 호출을 하나의 메소드로만
지정할 경우 사용하며 이때 하나의 메소드만 public으로 지정하고 나머지는
private으로 지정합니다.(★)
PrivateTest.java
class PrivateTest {
public int kuk = 0;
public int eng = 0;
public int sum = 0;
private void sum(){
sum = kuk+eng;
if ( sum > 200){
System.out.println("점수가 200을 초과했습니다.");
sum = 0;
}else{
System.out.println("합계가 정상적으로 처리됬습니다.");
}
}
//Deligate Method
public void call_sum(){
sum();
}
}
PrivateTestMain.java
public class PrivateTestMain {
public static void main(String[] args) {
PrivateTest pt = new PrivateTest();
pt.kuk = 90;
pt.eng = 95;
//pt.sum(); //외부에서 호출할 수 없습니다.
pt.call_sum();
System.out.println("pt.sum(): " + pt.sum);
}
}
Garbage Collecting
member 변수와 객체에 할당된 메모리를 회수 합니다.
자바 가상 기계가 자동으로 수행 합니다.
멤버 메소드등 일반 메소드안에서 생성된 객체는 메소드 종료시 자동으로 메모리 회수됩니다.
null 값을 가지고 있는 객체변수는 회수의 대상이 됩니다.
우선 순위가 낮은 스레드로 수행, 일반적인 경우 모든 스레드가 종료된 후 수행
gc()를 실행되면 강제로 메모리 회수 작업을 하게되며 finalize()메소드가 호출된다. 그러나 gc()자체는 많은 부하를 동반함으로 JVM이 실행하도록 하는것이 좋습니다.
Garbage.java
class Garbage {
int objNo;
public Garbage(int n) {
objNo = n;
System.out.println("Garbage class " + objNo + " 이 만들어 졌습니다.");
}
//객체의 메모리가 회수 될때에 자동으로 호출됩니다.
protected void finalize() throws Throwable {
System.out.println("Garbage class " + objNo + " 에서 쓰이던 메모리가 수집되었습니다.");
super.finalize();
}
}
GarbageTest.java
publicclassGarbageTest {publicstaticvoidmain(String[] args) {Garbage[] ga =newGarbage[10];//객체 생성for (int i=0; i <ga.length; i++) { ga[i] =newGarbage(i); }//객체 메모리 해제for (int i=0; i <ga.length; i++) { ga[i] =null;//메모리 회수의 대상이 됩니다. }//강제로 가베지컬렉션 기능 수행System.gc(); }}