Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 한번 해블로그

[Java] 13. 객체에게 접근하는 권한 이해하기 본문

Java

[Java] 13. 객체에게 접근하는 권한 이해하기

hide on bush 2023. 12. 8. 11:31

우리는 객체 상호간에 접근을 제어할 수 있어야 한다.
예를 들어 내가 어떤 캐릭터의 정보로 <이름: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로 바꿔서 내야함 ㅋㅋㅋ ㅠㅠㅠㅠ(땡큐 지피티..)