class의 구조
Class는 필드 영역 과 생성자 영역 1 메소드 영역 2로 이루어져 있다. 그리고 클래스 명 앞에 옵션으로 붙는 녀석들이 있는데 , public과 default가 가능하다. 3
접근 제한자(옵션)
접근 제한자에는 권한이 낮은순으로 public > protected > default > private 순이다. 오른쪽으로 갈 수록 접근권한이 높아진다
public : 어디서든 사용가능한 접근 제한자, 같은 패키지, 다른 패키지 모두 가능하다.
protected : 같은 패키지 또는 다른 패키지의 경우 상속관계(부모 자식 관계)일 때만 접근 가능하다.
default : 아무것도 작성하지 않으면 자동으로 작성되는 것( 같은 패키지에서만 가능)
private : 오직 작성한 해당 클래스에서만 사용 가능한 것.
접근 제한자를 사용하는 이유 : public은 외부에서 함수로 값을 변경하거나 조회권한이 없는 사람이 값을 쉽게 가져올 수 있기 때문에 이것을 방지하고자 "캡슐화"를 진행한다
캡슐화 : 추상화를 통해서 정의된 속성들과 기능을 묶어 관리하는 기법 중 하나로 클래스에서 가장 중요한 목적인 (접근 제한) 정보은닉을 원칙으로 외부로부터 데이터 접근을 막고 대신에 "데이터를 간접적으로" 처리( 값을 대입, 값을 돌려주거나 ) 할 메소드들을 클래스 내부에 작성해서 관리하는 것.
요약 : 내 클래스에서는 내 룰을 따라라
필드영역
변수(데이터)를 선언하는 곳. 모든 접근 제한자를 사용 할 수 있다.
옵션 자료형 변수이름; 으로 선언한다.
private String name;
private int age;
private int height;
생성자 영역
public을 대체로 사용하며 구성은 옵션 생성자 이름(클라스 명과 같게한다) (매개변수들);
이다. public Student(String name, int age, int height) {
this.name=name; *this를 사용할 시 필드영역에 선언된 값을 의미하고
this.age=age; this가 붙지 않은 녀석은 인자로부터 매개변수로 값을
this.height=height; 받아오는 다른 녀석이다.
}
위 코드를 줄여보면
public Student(String name, int age, int height) {
this(name, age, height);
} 처럼 줄여버릴 수 있다. *주의사항으로는 this는 생성자 안의 제일 위에 위치해야한다.
이렇게 생성자를 만들면 프로그램이 자동으로 너 생성자 가지고있네? 하며 기본 생성자를 만들어 주지 않는다.
하지만 기본 생성자를 사용하고 싶다면 만들어주면 된다. 밑 처럼 만들어주면 된다.
public Student(){
}
생성자는 매개변수의 개수와 자료형에 따라 구분이 된다. (오버로딩) *메서드도 가능하다.
메서드 영역(함수)
옵션명 반환형 메소드명(매개변수){
기능 코드
}
public void print(String name){ 여기는 우리 일반 작동하는 코드 작성하듯이 작성하면 된다.
}
정보은닉 하기위해 필수로 해야하는 것.
필드영역의 변수를 정보은닉을 목적으로 접근자를 private로 바꾼다면 외부에서 값을 변경하거나 가져오기가 불가능하기때문에 관리자가 만든 함수로 값을 가져오거나 대입시키기 위해 메소드를 만들어야한다.
이것을 getter 와 setter라고 한다. (약속으로 정해져있음)
사용법은
//getter 영역 값을 가져오기 위한 메소드라서 반환형과 반환값이 필요하다는게 특징. this를 사용하여 필드 영역의 변수에서 값을 가져온다.
public String getName() {
return this.Name;
}
public int getAge() {
return this.age;
}
public int getHeight() {
return this.height;
}
//setter 영역 값을 대입시키는 메소드라서 반환형과 반환 값이 필요 없다는게 특징 마찬가지로 this. 를 사용하여 필드 영역에 변수에 매개변수로 받은 값을 대입.
public void setName() {
this.name=name;
}
public void setAge() {
this.age=age;
}
public void setHeight() {
this.height()=height;
}