[Java] 변수 선언 위치에 따른 분류 / 접근제한자

2021. 1. 23. 14:45Dev.Program/Java & Spring

728x90

지난번 복습

========Ex.java 파일 만들기 (main 체크)

문제 )

자동차(Car) 클래스 정의

 - 멤버변수

   1) 현재속력(speed, 정수형)

   2) 최대속력(maxSpeed, 정수형)

   

 - 메서드

   1) 속력 증가 : speedUp() 

   -파라미터로 증가할 속력(s) 전달, 리턴값 없음

   -증가할 속력(s)을 전달받아 현재속력(speed)에 누적 및 현재속력을 출력

        단, 누적된 속력이 최대 속력(maxSpeed) 보다 클 경우

        현재 속력(speed)을 최대 속력(maxSpeed)으로 고정 후 "최대 속력 도달!" 출력

   2) 속력 감소 : speedDown() 

   -파라미터로 감소할 속력(s) 전달, 리턴값 없음

   -증가할 속력(s)을 전달받아 현재속력(speed)에서 차감 및 현재속력을 출력

        단, 차감된 속력이 0 보다 작을 경우

        현재 속력(speed)을 0 으로 고정 후 "차량 정지!" 출력 

푼 답 ) 맨 밑에 main class 바깥에 적어주기

확인 해보기 )

 

선생님 답안 ) 더 간단해짐!

< 변수 선언 위치에 따른 분류 >

교재 p.180-181

1. 멤버변수 : 클래스 내부, 메서드 외부에 선언된 변수. 클래스 내에서 접근 가능

  • 인스턴스 멤버 변수 : static 키워드가 없는 멤버변수 
  • 클래스 멤버 변수 : static 키워드가 있는 멤버변수
    • ⇒ 멤버 변수는 사용 전 초기화를 수행하지 않으면, 자동으로 기본값으로 초기화 됨

2. 로컬변수 : 메서드 내부에 선언된 변수. 해당 메서드 내에서만 접근 가능

  • 로컬 변수 : 메서드 내에서 선언된 변수
  • 파라미터 변수 : 메서드 선언부 파라미터 부분에서 선언된 변수
    • ⇒ 로컬 변수는 반드시 사용 전 초기화 필수!

 

======== Ex2.java 만들기

int instanceVariable;

static int classVariable; ⇒ 차이! 기울어진 꼴!

  • 로컬 변수 선언 전이므로 사용 불가

  • localVariable2는 선언 후 초기화를 안했기 때문에 사용 불가

  • for문 종료 후 로컬변수 i는 제거되므로 접근 불가

  • 존재하지 않는 변수이므로 접근 불가

  • 인스턴스 변수 접근 가능



p.190-191 & p243(접근제한자)

< 접근제한자(= 접근제어자, Access Modifier) >

  • 클래스, 메서드, 멤버변수 등에 접근을 제어하는 키워드
  • public, protected, default(= package), private 4가지

1. public : 누구나 접근 가능하도록 지정(모든 클래스에서 접근 가능)

  • 주로 멤버변수에 접근하여 데이터를 대신 입출력 하는 기능의 메서드에 사용

      = Getter/Setter 메서드

      1) Getter : 멤버변수의 값을 외부로 리턴하는 역할(파라미터 X, 리턴값 O)

                        일반적으로 getXXX() 형태의 이름을 사용(XXX : 멤버변수명)

      2) Setter : 외부로부터 값을 전달받아 멤버변수에 저장하는 역할

                        (파라미터 O, 리턴값 X)

                        일반적으로 setXXX() 형태의 이름을 사용(XXX : 멤버변수명)

      ⇒ Getter/Setter 자동 생성 단축키 : Alt + Shift + S → R (p.251)

2. private : 자신의 클래스 내에서만 접근 가능(다른 클래스에서 접근 불가)

  • 주로 멤버변수의 접근을 외부로부터 차단하기 위해 사용

 

⇒ 이처럼 멤버변수에 private 접근제한자를 사용하여 외부 접근을 차단하고

    별도의 Getter/Setter 메서드를 public 으로 제공하여

    간접적인 데이터 입출력을 허용하는 것을 Encapsulation(캡슐화, 은닉) 라고 함

    (데이터 보호를 위해 Getter/Setter 내에서 부가적인 확인 작업도 가능)

 

======== Ex3.java 만들기

  • private : Student2 클래스 내에서만 접근 가능(다른 클래스에서 접근 불가)

  • score 오류 남!!

  • 오류 문장 잘 보기
  • The field Student2.score is not visible
  • not visible!!! 보이지 않는다 (score는 private 접근제한자로 지정되어 있기 때문)

  • score는 안보임!!!( private 접근제한자로 지정되어 있기 때문 )

 

  • Getter/Setter 하는 일 잘보기!

 

  • getScore() 와 setScore() 메서드를 불러낼 수 있다!

  • 이제 출력값이 잘 나옴.

 

======== Test3.java 새 문서 만들기

문제 )

은행계좌(Account3) 클래스 정의

1. 멤버변수

- 계좌번호(acccountNo, 문자열)

- 예금주명(ownerName, 문자열)

- 현재잔고(balance, 정수)

  • 풀이 )

> 이제 전부 private로 바꿈

  • 그럼 위에 전부 오류 뜸!

⇒ 값을 저장하기 위해 멤버변수에 직접 접근이 불가능하므로 Setter 메서드 사용

⇒ 값을 출력하기 위해 멤버변수에 직접 접근이 불가능하므로 Getter 메서드 사용

  • Getter / Setter 설정

  • 출력!

 

> 잔고를 설정- 한다는 건 좀 이상하다

그래서 setBalance는 지우고 입금/출금으로 설정

  • a.deposit(2100000000);

 

교재 p.247-251

  • Getter / Setter 자동완성 단축키
  • Alt + Shift + S → R (Gerate ⇒ r에 밑줄 쳐져 있는거 : 단축키)

  • 자동으로 만들어줌!

  • 삽입 위치 지정

  • 정렬

  • 메서드들의 접근 제한자(이건 손 안댐)

 

문제 )

Test.java 문서에서

Account4 클래스 정의

멤버변수 3개에 대한 Getter/Setter 자동생성

 

======== Test4.java 새 문서 만들기

문제 ) Student1 클래스 정의하시오. (전부 private로 만들고 Getter/Setter 만들기)

  • getter / setter 는 자동완성 (alt + shift + s + r)

  • 출력

 

> 문제 추가 )

  1. 메서드명 getTotal

기능 : 국어, 영어, 수학 점수를 모두 더해서 반환

반환 타입 : int

매개변수 : 없음

  1. 메서드명 getAverage

기능 : 총점(국어, 영어, 수학 점수)를 과목수로 나눈 평균을 구해서 반환

  • 소수점 둘째자리에서 반올림할 것

반환 타입 : float

매개변수 : 없음

 

푼 답 ) 소수점은 안함

 

선생님 답안 ) 계산은 지금은 중요한게 아니라서 그냥 넘어감.



728x90

'Dev.Program > Java & Spring' 카테고리의 다른 글

[Java] 생성자(Constructor)  (0) 2021.01.23
[Java] 오버로딩 / 가변인자  (0) 2021.01.23
[Java] 클래스의 객체 / 인스턴스화  (0) 2021.01.19
[Java] 메서드(Method)  (0) 2021.01.19
[Java] 2차원배열  (0) 2021.01.19