본문 바로가기
카테고리 없음

JAVA class만들고 해부하기

by Dodledd 2024. 1. 19.

class의 구조

Class는 필드 영역[각주:1] 과 생성자 영역[각주:2] 메소드 영역[각주:3]로 이루어져 있다. 그리고 클래스 명 앞에 옵션으로 붙는 녀석들이 있는데 , public과 default가 가능하다.

접근 제한자(옵션)

접근 제한자에는 권한이 낮은순으로 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;

}

 

 

  1. 변수(데이터)를 선언하는 곳 [본문으로]
  2. 초기화 하고자 하는 값을 담은 이름과 매개변수 [본문으로]
  3. 필드 영역에서 선언된 변수(데이터를 가지고 동작하게 하는 곳) [본문으로]