yeny_lab

[혼자 공부하는 자바] 7/08 06-6 [패키지와 접근 제한자]

2020. 7. 8. 23:36·JAVA
728x90


ㅠㅠ 어제 해야 할 6-5를 오늘 했다.

6챕터의 마지막!!

 

6-6 패키지와 접근 제한자

패키지 선언, import문, 접근 제한자, Getter/Setter

 

6-6은 아주 막연하게 알았던 import문이나 접근 제한자를 공부한다.

처음 보는 Getter/Setter은 뭘까 >.<?!


패키지

ㅇ엄청 많은 클래스들을 관리하기 위함!!

패키지를 선언하는 방법과, 패키지 간의 접근을 위한 접근 제한자를 공부한다.

아 뭔가 패키지끼리 접근 하는 거랑 접근 제한자랑 연관이 되어있던 거구나

 

ㅇ클래스 이름이 동일해도 패키지가 다르면 다른 클래스로 인식한다.

원래 클래스의 전체 이름이 '패키지 이름 + 클래스 이름' 이다. 패키지까지 봐야 한다.

패키지도 클래스 정보의 일부분이고, 클래스를 유일하게 만드는 식별자의 역할을 한다.

>>만약 클래스를 다른 공간에 이동시키고 싶으면 '패키지 전체를 이동해야 한다'

패키지는 클래스의 일부이다. 클래스만 따로 복사해서 이동하면 클래스를 사용할 수 없다.

클래스는 패키지에 소속되어있다. 항상 패키지가 따라가야 한다.

 

 

클래스 이름음 다음처럼 표현..

상위패키지.하위패키지.클래스

 

아.. 지금까지 이 책에서 패키지 이름을

sec01.exam01 처럼 지었는데 저 도트가 그런 개념이 있었구나

난 그것두 모르구......

 

-패키지 이름 규칙-

- 역시 특문은 $, _만 되며 숫자시작은 안됨

- java로 시작하는 패키지 사용하면 안됨. 자바 표준 API에서만 사용

- 모두 소문자 작성이 관례

 

 

재밌는 사실: 여러 회사가 개발에 참여할 때 패키지 이름이 중복되지 않도록 자기 회사 도메인 이름으로 패키지 이름을 정한다!!! ㅇ0ㅇ~!! +도메인 이름 역순으로 써준다고 한다! 포괄적인게 상위 패키지 되도록 하려고..! 

그리고 마지막엔 프로젝트 이름 붙여주는게 관례라고 한다

 

 

ㅇJDK 8 이전에선 패키지가 없는 클래스 선언 가능했다. (default 패키지에 뒀다고 함) 하지만 11 이후에는 패키지 없는 클래스면 컴파일 에러!

 


import문

드뎌 import문의 정체를 자세히 아라보기!!

 

어떤 패키지의 클래스 or 인터페이스를 가져와 쓸 거라고 컴파일러에게 알려주는 것이다

 

<패키지 선언과 클래스 선언 사이이 작성>

import 상위패키지.하위패키지.클래스이름;

import 상위패키지.하위패키지.*;

 

ㅡㅡㅡㅡ

주의점: 상위패키지 import했다고 해서 하위패키지가 import되는 것은 아니다.

하위 패키지에 필요한 클래스가 있으면 하위 패키지까지 전부 다 써줘야 한다.

 

서로 다른 패키지에 동일한 클래스 이름이 존자하고 두 패키지 모두 import되었으면..

어떤 패키지의 클래스를 사용해야 할지 모호하기 때문에 컴파일 에러가 난다.

 

이럴 때는 그 클래스 사용할 때 '패키지까지 포함한' 클래스 전체 이름을 기술해야 한다.

 

다음 예시를 보자아

사용할 클래스가 겹치면 패키지 이름까지 다 다다다다 명시해줘야 한다.

ㅡㅡㅡㅡ

 

++import문 자동 추가기능도 있다! 우와

이클립스에는

사용된 클래스를 조사해서 필요한 import문을 자동으로 추가하는 기능이 있다...

 

현재 클래스에서 [Source] - [Organize imports]

또는

단축키ㅎ0ㅎ 컨+쉬+O

 

기본적으로 import 패키지.클래스;로 추가된다.

이클립스 설정을 통해서 import.패키지.*; 로 추가되는 걸로 변경도 가능하다.


접근 제한자 (Access Modifier)

접근 --> 클래스, 인터페이스, 멤버의 접근을 말한다.

 

ㅇ다른 패키지에서 어떤 클래스, 인터페이스를 사용 못하도록 막거나

ㅇ객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 (<-이거 해봤지!! 싱글톤 객체 배울때!!)

ㅇ필드나 메소드를 사용하지 못하게 막아야 하는 경우

접근 제한자를 사용한다.

 

세 가지 종류가 있다.

ㅇ public 접근제한자 : public임!! 외부 클래스에서 자유로이..

ㅇ protected 접근제한자 : 같은 패키지 or 자식 클래스 (다른 패키지에 속해도, 자식 클래스에서라면 사용할 수 있다.)

ㅇ private 접근제한자 : 외부에서 사용 불가. 그 클래스에서만 가능.

이런 접근 제한자가 명시되지 않으면

ㅇdefault 접근 제한을 가진다. : 같은 패키지 안에서만 사용할 수 있게 함.

 

접근 제한을 세 가지로 나눠 공부하자

 

1. 클래스의 접근 제한 ( public, default )

>>클래스 외/내부 접근 가능성에 따른다.

 

2. 생성자의 접근 제한 ( public, protected, default, private )

>>생성자가 어떤 접근 제한을 갖느냐에 따라 생성자 호출이 가능한지 불가능한지가 결정된다.

>>클래스에 생성자를 선언하지 않으면 컴파일러가 자동으로 기본 생성자를 추가한다고 했다. 이때 이 기본 생성자의 접근 제한은 클래스 접근 제한과 동일하게 된다.

 

3. 필드, 메소드의 접근 제한 ( public, protected, default, private )

>>오케이~!

 

 

 


Setter/Getter


 

객체 지향 프로그래밍에서는 객체에 외부에서 직접적으로 접근해 필드를 변경하는 것을 막는다.

객체의 무결성이 깨질 수 있기 때문이다.

 

그래서.. 객체 지향 프로그래밍에서는 메소드를 통해 필드를 변경하는 것을 선호한다.

외부에서 필드에 직접 접근하는 것을 막고, 메소드는 공개해서!

메소드를 통해 필드에 접근하도록 한다.

메소드로 매개값을 검증해서 유효할 경우에만 필드 값을 옳게 변경할 수 있도록 해 놓은 것이다.

 

이런 역할을 하는 메소드를 Setter이라고 한다.

검증 코드..

 

예를 들면

자동차의 속도를 정하는 메소드가 있다고 하면, 매개값으로 음수를 넣는 것은 부적절하다.

그래서 다음처럼 검증 코드를 작성할 수 있다.

 

void setSpeed(double speed) {

  if (speed < 0) {

    this.speed = 0;

    return;

  } else {

    this.speed = speed;

  }

}

 


한편.. 

외부에서 객체 데이터를 읽을 때에도 메소드를 거치는 것이 좋다.

필드값을 직접 다루면 부적절한 경우가 있다고 한다.

 

그래서 메소드를 통해 필드값을 가공한 후 외부로 전달하면 된다고 한다...

이런 메소드가 Getter이다.

 

예를 들어서..

자동차 속도를 마일에서 km단위로 환산해 외부로 리턴하는 메소도 getSpeed()메소드의 작성

 

double getSpeed() {

  double km = speed * 1.6;

  return km;

}

 


필드를 가능하다면 private로 선언해서 외부로부터 보호하는 것이 좋다.

그리고 나서

필드에 대한 Setter와 Getter 메소드를 따로 작성해서

필드값을 안전하게 변경하고 사용하는 것이 좋다

 

다음 예시처럼!!

 

 

내용 출처: 혼공자 303p

 

다만

필드 타입이 boolean이면

Getter 이름은 get이 아닌 is로 시작하는 것이 관례. (<-이거 많이 봤다!)

 

예를 들면..

 

 

++만약에

외부에서 필드값 읽기만 하고 변경 못하게 하려면 Getter 메소드만 선언하자.

아니면 Setter 메소드가 private 접근 제한을 갖도록 선언하기.

 

++

이클립스에는 Getter과 Setter 자동 생성 기능도 있다.

필드를 선언한 다음에 [Source]->[Generate Getters and Setters] 하면

선언된 필드에 대한 게터, 세터를 자동으로 생성시킬 수도 있다.

완전 편하네!!

 

 

<Getter, Setter 메소드 익히기>

 


 

728x90

'JAVA' 카테고리의 다른 글

[혼자 공부하는 자바] 7/10 07-2 [타입 변환과 다형성] [자동 타입 변환] [강제 타입 변환]  (2) 2020.07.11
[혼자 공부하는 자바] 7/09 07-1 [상속] [자식클래스] [부모클래스] [오버라이딩] [메소드 재정의]  (0) 2020.07.10
[혼자 공부하는 자바] 7/08 06-5 [인스턴스 멤버와 정적 멤버] [static] / [private] [접근제한자] / [final 필드] [상수]  (1) 2020.07.07
[혼자 공부하는 자바] 7/07 06-4 [메소드]  (0) 2020.07.07
[1주차] 기본미션 + 선택미션 [혼공단] [혼공자]  (0) 2020.07.07
'JAVA' 카테고리의 다른 글
  • [혼자 공부하는 자바] 7/10 07-2 [타입 변환과 다형성] [자동 타입 변환] [강제 타입 변환]
  • [혼자 공부하는 자바] 7/09 07-1 [상속] [자식클래스] [부모클래스] [오버라이딩] [메소드 재정의]
  • [혼자 공부하는 자바] 7/08 06-5 [인스턴스 멤버와 정적 멤버] [static] / [private] [접근제한자] / [final 필드] [상수]
  • [혼자 공부하는 자바] 7/07 06-4 [메소드]
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (387)
      • 미분류글 (30)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (59)
      • yyeeennyy (25)
  • 공지사항

    • ^o^/♡
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
히어로맛쿠키
[혼자 공부하는 자바] 7/08 06-6 [패키지와 접근 제한자]
상단으로

티스토리툴바