접근제한자(Access Modifier) & 캡슐화

2024. 10. 18. 15:39java

접근 제한자(Access Modifier):

접근을 제한하기 위해 사용되며, 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말함

래스 내부에서 필드를 선언할 때는 반드시 접근제한자를 붙일것

 

 

  • public: 어디서든(같은패키지, 다른 패키지, 클래스 내/외부 포함 전부) 접근가능
  • protected: 같은 패키지라면 무조건 접근 가능, 다른 패키지라면 상속구조인 클래스에서만 접근 가능
  • default: 같은 패키지에 소속된 클래스에서만 사용
  • private:개인적인 것이라 외부에서 사용 불가,  오직 해당 클래스 안에서만 접근가능

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스

 

접근제한자 사용

  • 클래스 : public, default
  • 생성자  : public, protected, default, private
  • 멤버변수 : public, protected, default, private
  • 멤버메소드 : public, protected, default, private
  • 지역변수 : 접근제한자 사용 불허

 

 

클래스: 각 객체들의 정보 (속성, 행위)들을 담아내는 그릇 또는 틀 또는 설계도 또는 명세

클래스 : Vo(Value Object)

// 필드부, 생성자부, 메소드부

  • 필드(filed)부
    객체가 가질 수 있는 속성으로 정보를 담는 부분

     [ 표현법 ] 

    멤버변수
    접근제한자 자료형 필드식별자;
    private                     int         price;

private int price;

private String brand;

private String caseColor;

 

  • 생성자(Constructor)부
    식별자가 클래스식별자와 동일하고 반환형이 존재하지 않는 메소드
    - 기술적관점: 객체를 생성해주기 위해 생성
    - 개념적관점: 객체를 생성하는것 뿐만 아니라 유효성이 있는 객체로 만들어주기 위해 생성

     [ 표현법 ] 
     public 클래스이름(매개변수(생략가능)){
     해당 생성자를 통해서 객체 생성 시 실행하고자 하는 코드;
     }

     \

      

      [ 생성자의 종류 ]

  • 매개변수가 없는 생성자   기본생성자
    - 단지 객체를 생성할 목적으로 사용 -> heap 영역에 할당할 때 공간을 확보하는 문법
    - 클래스 내에 생성자를 하나도 작성하지 않으면 컴파일러가 기본생성자를 자동으로 만들어줌
    - 기본 생성자는 생략해도 오류가 나지 않으나 확인을 위해 "항상" 작성하는 버릇을 들이는 것이 좋음

public Member() {

// 기본생성자(매개변수가 없음)

System.out.println("회원가입 성공!");

}

 

  • 매개변수가 존재하는 생성자

public Member(String userId, String userPwd, String userName, String PhoneNumber, String phoneNumber) {

this.userId = userId;

this.userPwd = userPwd;

this.userName = userName;

this.phoneNumber = phoneNumber;

}

 

→  차이점: 필드에 값을 대입할 수 있느냐 없느냐 차이

 

 

    [참고사항]

  •  반드시 생성자의 이름을 클래스의 이름과 동일할게 작성해야함 (대/소문자 주의)
  • 반환형이 존재해서는 안됨!(반환형 적으면 메소드로 판단함) 
  • 매개변수 생성자를 명시적으로 작성하면 기본생성자를 만들어주지 않음
      →   꼭 기본생성자를 만드는 버릇을 들이기
  • 생성자를 여러 개 생성이 가능하지만 매개변수가 중복되면 안됨!     오버로딩

 

  • 메소드(Method)부
    기능을 구현하는 부분(method)

     [ 표현법 ] 
    접근제한자 (예약어) 반환형 메소드식별자(매개변수) {
    메소드 호출 시 실행할 코드;
     }

    - 접근제한자 : 호출할 수 있는 범위를 제한
    - 반환형: void -> 돌려줄 값이 없음 / 메소드 결과값의 자료형을 지정
    - 매개변수 : 메소드 호출 시 전달값을 받아주는 변수 (메소드 범위에서만 사용이 가능. 생략 가능)

private void method1() {

System.out.println("하하호호");

}

 

 


캡슐화 information hiding(정보은닉)

은닉화 전제로 하며 관련이 있는 데이터 그리고 동작들을 하나로 묶어 요약하고 사용자에게는 내부적인 접근을 허용하지 않는 대신에 사용의 편의성을 제공함

 

 

[캡슐화의 장점]

  • 데이터 보호: 은닉화를 통해 데이터의 접근을 제어
  • 유지 보수
  • 사용자 편의성 

[캡슐화 방법]

  • 값을 숨긴다: 필드의 접근제한자를 public 대신 private으로 선언
  • 메소드를 통해 필드에 접근할 수 있도록 진행 getter() / setter()생성  

 

 

setter():  데이터를 기록 및 수정하는 기능의 메소드

 

 [setter 생성 규칙]

  • 외부에서 접근이 가능해야 하기 때문에 접근제한자 public을 이용
  • set 필드명으로 식별자를 작성하며 낙타봉표기법(camelCase) 사용용
  • (예외상황) Vo클래스에서 모든 필드에 대해 전부 다 setter 메소드 만들어주기

public void setPrice(int price){

 

if(price < 1) {

System.out.println("정상적이지 않은 값을 입력했습니다.");

} else {

this.price = price;

}

}

 

public void setBrand(String brand) {

this.brand = brand;

}

 

public void setCasecolor(String caseColor){

this.caseColor = caseColor;

}

 

 

getter():  데이터를 반환해주는 기능의 메소드

 

 [getter 생성 규칙]

  • 외부에서 접근이 가능해야 하기 때문에 접근제한자 public을 이용
  • get 필드명으로 식별자를 작성하며 낙타봉표기법(camelCase) 사용용
  • 모든 필드에 대해 전부 다 반드시 getter 메소드 만들어주기

public int getPrice() {

return price ;

}

 

public String getBrand() {

return brand;

}

 

public String getCaseColor() {

return caseColor;

}

 

public String getProductName() {

return productName;

}

 

 

public String intformation() {

 

String info = productName + "은" + brand + " 사에서 제조하였고, " + "가격은 " + price + "원 이며, "

+ caseColor + "색 입니다.";

 

return info;

}