개발 한번 해블로그
[Java] 13. 객체에게 접근하는 권한 이해하기 본문
우리는 객체 상호간에 접근을 제어할 수 있어야 한다.
예를 들어 내가 어떤 캐릭터의 정보로 <이름:Hide on Bush, 나이 : 28, 티어: 챌린저> 라고 저장을 해놨는데 어떤 괘씸한 사람이 자격지심으로 내 티어를 아이언으로 바꿔버렸다.🤬
여기서 이름, 나이, 티어는 상태 정보라 접근을 제한해야한다.
1. 접근제어란(Acces Modifier)?
1) 클래스 간의 접근을 제어하는 것이며 객체를 보호하기 위해서 필요
- 만약 상태에 이름, 나이, 키 등이 있으면 30살을 100살로 바꿀 수 있기 때문에 접근을 제한해야 한다.
- 행위에는 먹다, 놀다 등이 있으면 A가 B에게 접근을 해서 동작하게 할 수 있다.
- 즉 X는 객체의 상태 정보는 중요하기 때문에 접근을 못하게 해야 한다. 이걸 정보 은닉이라고 함
- 즉 O는 객체의 행위 정보는 상호 작용을 해야 되기 때문에 접근을 허용한다.
2) 객체 상호 간 접근을 제어하는 방법
- 4가지 접근 제한자를 사용
- 클래스를 설계할 때 고려하며 클래스와 클래스 내부에서 만들어지는 멤버(멤버변수, 멤버 메서드)에 접근 제한자를 사용할 수 있다
접근 제한자 | 설명 |
public | 모든 패키지에서 접근 가능 모든 클래스는 public 모든 멤버메서드는 public |
private | 모든 패키지에서 접근 불가 자기 자신만 접근 가능 모든 멤버변수는 private |
protected | 상속관계에서 하위클래스에서 상위클래스 접근 가능 |
default | 동일한 패키지에서만 접근 가능(실제로 단어로 존재하지 않음) |
public class MemberDTO {
public String name;
private int age; //은닉
public String phone;
public void play(){
System.out.println("운동하기");
}
}
import fc.java.model.MemberDTO;
public class AccessModifier {
public static void main(String[] args) {
MemberDTO dto=new MemberDTO();
dto.name="홍길동";
//dto.age=25; //private로 설계해서 접근 불가
dto.phone="010-1111-1111";
System.out.println(dto.name+"\t"+dto.phone);
dto.play();
}
}
여기서 잠깐 패키지에 대해서 알아보자.
2. 패키지란?
1)
- 서로 기능이 비슷한 클래스들끼리 모아서 관리를 쉽게 하기 위한 것(약간의 폴더 개념)
- 패키지 외부에서 클래스의 접근을 할 수 없도록 하기 위해(보안 측면)
- 자바에서 제공해 주는 API도 패키지의 형태로 배포되어 있음
- java.lang : 자바에서 자주 사용하는 클래스(String, System 등)로 디폴트 패키지라고도 함
- java.net : 네트워킹 관련 클래스(ip 주소 등)
- java.sql : 데이터베이스 관련 클래스(CRUD 관련), SQL
- java.math : 수학 관련 클래스
- java.util : 도움을 주는 클래스(Scanner 등)
- java.io : 입출력 관련 클래스(InputStream 등)
- 이렇게 어떤 클래스에 접근하려면 어떤 패키지에 있는지 알아야한다(ex. java.lang.String)
- 클래스 풀이름은 패키지 이름을 포함한 클래스 이름
- 패키지를 현재 클래스에 추가하려면 import 사용(ex. import java.lang.String)
2) 지금까지 자바에서 제공하여 사용해 본 클래스 이름
- 문자열을 처리하는 클래스 : String -> 풀네임은 java.lang.String
- 콘솔에 데이터를 출력하는 클래스 : System -> 풀네임은 java.lang.System
- 키보드로부터 데이터를 읽어 들이는 클래스 : Scanner -> 풀네임은 java.util.Scanner
3) 우리가 직접 만들어서 사용해 본 클래스 이름
- 책 데이터를 저장하기 위한 클래스 : BookDTO -> fc.java.model.BookDTO
- 회원 데이터 저장을 위한 클래스 : MemberDTO -> fc.java.model.MemberDTO
- 영화 데이터를 저장하기 위한 클래스 : MovieDTO -> fc.java.model.MovieDTO
생각해보니까 과제도 했었는데 나는 진짜 머리속으로는 이렇게이렇게 하면 되겠다라고 구상은 다 했는데 코드를 하나도 못 짬. 그래서 갓지피티와 한 팀이 되어 과제를 다 마무리했음 ㅠㅠ 근데 지피티 가끔 이상한 말에서 KG받음 ㅠㅠ 사실상 내 과제는 내가 한게 아니라 지피티가 한 과제여서 제출할 때 이름 GPT로 바꿔서 내야함 ㅋㅋㅋ ㅠㅠㅠㅠ(땡큐 지피티..)
'Java' 카테고리의 다른 글
[Java] 15. 배열이랑 클래스의 관계 (1) | 2023.12.08 |
---|---|
[Java] 14. 잘 설계된 VO 클래스 (1) | 2023.12.08 |
[Java] 12. 클래스를 직접 만들 수 있는 미친 클라쓰~ (2) | 2023.12.08 |
[Java] 11. 클래스로 객체 모델링 (2) | 2023.11.29 |
[Java] 10. 메서드와 변수의 관계 이해 (4) | 2023.11.27 |