코딩 기록들
[Java Programming] 5.2 패키지, 접근제어지시자, 정보은닉&캡슐화 본문
패키지
- 윈도우에 있는 폴더라고 생각하기
- 여러 자바파일 중 관련된 파일들만 정리하여 모아둔 폴더
- 한 패키지 내에서 같은이름의 java파일은 만들 수 없음
패키지 이름 쓰는 방법
- 규칙 : 소문자와 점(".")을 제외한 다른문자는 쓰지 않음 (단어와 단어가 합쳐져도 구분되지 않음. 다 소문자로 작성)
- 애플리케이션을 개발하는 회사의 도메인을 역순으로 작성
ex) naver.com 에서package_exam애플리케이션을 개발한다면 -> com.naver가 기본 패키지명이 됨
업무명이 회원관리 -> com.naver.member.management
-> 이런식으로 패키지를 만든다면,
-> 이렇게 폴더가 생성되는것을 확인할수있음
-> 이클립스에서 패키지및 파일들을 좀더 깔끔하게 보기위한 설정
-> 위의 설정을 하면 이렇게 보임
접근제어지시자
- 패키지와는 별개의 문제로 클래스, 멤버변수, 메소드 등은 다른 클래스나 인스턴스가 접근을 마음대로 할 수 없도록 제한하는 기능이 있는데, 이것을 접근제어지시자라고 함
- 잘못된 접근제어지시자를 사용할때 발생하는 에러 -
The field Member.id is not visible
The field Member.name is not visible
- 지시자는 제공되는 범위에따라 4개로 구분됨
** 접근제어 지시자를 안쓴경우 자동으로 default로 지정됨
정보은닉
- 무엇을 숨기는가? : 인스턴스의 정보를 표현하는 멤버변수는 데이터의 보호를 위해 외부로부터 접근이 제한돼야함
-> 따라서 멤버변수의 접근제한자는 public이 아닌 private으로 사용해야하고, 생성자를 통해 멤버변수의 값을 설정해야함
- 메모리 주소의 연결을 끊기 위함
- 멤버변수를 외부에서 변경하지못하게 하도록 private 붙임 -> 확인도 못함 -> 해결방법 : getter 정의 (값을 돌려돌려서 줌)
getter 형태
public + 멤버변수의 타입 + get+멤버변수(첫글자 대문자로) {
return this.멤버변수;
}
- 멤버 인스턴스의 멤버변수들은 private로 제한 + 값할당은 생성자에서만 가능 + 멤버변수의 값은 Getter로 반환하여 사용
Getter
- 외부에서 값을 받아 필드를 변경하는 메소드
- 외부의 데이터를 읽을 때 메소드 사용
-> 메소드로 필드값을 가공한 후 외부로 전달
캡슐화
기능이 없는 데이터클래스에서 '만', 멤버변수의 값은 재할당이 불가능할까? -> Setter 사용 !
- 외부에서 멤버변수에게 접근할수 있게 됨
- setter 는 데이터를 반환시키지 않음! (void)
Setter
- 필드의 값을 외부로 리턴해주는 메소드
- 메소드를 통해 필드를 변경하는 방법
- 필드는 외부에서 접근할 수 없게 막고, 메소드는 공개해서 외부 메소드를 통해 필드에 접근하도록 유도 (가능한 이유 : 메소드는 매개값을 검증해서 유효한 값만 객체의 필드로 저장할 수 있기 때문)
Getter Setter 사용예제
package com.naver.member.management; // 자바파일의 위치를 알려줌
public class Member {
private String id;
private String name;
public Member(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 데이터를 가져오는 getter
- 데이터를 넣는 setter
package com.naver.bbs.management;
//다른패키지에 있는 클래스를 사용하려면, 어떤패키지에 있는지 살펴봐야함
import com.naver.member.management.Member;
public class Article {
public static void main(String[] args) {
Member member = new Member("ID", "관리자");
//데이터를 가져오는 getter
String id = member.getId();
String name = member.getName();
System.out.println(id);
System.out.println(name);
//데이터를 넣는 setter
member.setId("changed_id");
member.setName("일반사용자");
id = member.getId();
name = member.getName();
System.out.println(id);
System.out.println(name);
}
}
- 단, 필드타입이 boolean일경우 -> Getter은 get으로 시작하지않고, is로 시작하는것이 관례임
- 만약, 외부에서 필드값을 읽을수만 있고, 변경하지 못하도록 하고싶다면
-> Getter메소드만 선언(=읽기전용) or Setter메소드가 private 접근제한을 갖도록 선언
'Java' 카테고리의 다른 글
[Java Programming] 6.1 클래스 변수 / 메소드 (0) | 2024.01.24 |
---|---|
[Java Programming] 5.1 생성자 (1) | 2024.01.23 |
[Java Programming] 4.2 클래스와 인스턴스 (0) | 2024.01.22 |
[Java Programming] 4.1 (반환하는) 메소드 (0) | 2024.01.22 |
[Java Programming] 3.2 메소드 (0) | 2024.01.19 |