10월 28일 Day 13

여우·2022년 10월 30일
0

공부중

목록 보기
7/38

1. Access Modifier (접근제한자)

클래스의 구성요소는 4가지가 있다.

  • 필드 : 객체의 속성을 저장.
  • 메서드 : 객체의 기능을 정의
  • 생성자 : 객체 생성 시 초기 값 할당및 초기 작동을 지정
  • 접근제한자 : 객체 외부에서 내부로 접근하는 해위를 허용하거나 거부한다.

접근제한자의 종류로는

  • private : 외부에서의 모든 접근을 허용하지 않는다 (내부에서는 자유롭게 접근 - 가능)
  • package : 같은 패키지 폴더 내에서의 접근을 허용한다 (지정하지 않았을 경우 기본값)
  • protected : 같은 패키지 + 상속 관계에서의 접근을 허용한다
  • public : 모든 접근을 허용한다

예시)

Test 클래스의 변수들을 각각 private, package, protected, public으로 선언 하고 객체를 생성하여 접근가능한 범위를 확인한다.

n1의 경우 private 으로 분류 되어, 클래스 밖에서는 호출이 되지 않고 그 실체를 확인 하지 못해 에러 문구로 invisible로 표시 된다.

반면 클래스의 속성값은 private 라도, 메서드가 더 넓은 접근을 허용한다면 메서드를 통해 그 값을 보기가 가능해진다.

이렇게되면 n1을 출력하는 함수가 만들어진다. 직접적으로 접근할 수는 없지만, 메서드를 통하여 출력을 할 수는 있다. 이렇게 만들어진 함수로 출력은 가능해도 값을 변경할수는 없다.

2. getters 와 setters

접근제한자를 사용하여 필드값의 접근이 제한되는경우 외부에서 이를 불러서 사용해야 하는경우에는 특별히 사용되는 함수들이 있다. 바로 getter 와 setter 이다.

예시)

Student2 클래스에서 멤버필드가 모두 private로 지정이 되어 있다. 이때 클래스 밖에서 이름과 점수를 호출해야 한다면 그 값을 불러오는 getter를 사용해서 불러올 수 있다.

이렇게 사용하게 되면 Student2 클래스 밖에서도 private 멤버필드값을 확인 할 수가 있다.

  • 일반적으로 클래스를 작성할 때, field는 private을 적용하고,
    메서드는 public을 적용한다.
    단, 내부에서만 사용할 용도의 메서드는 private을 지정할 수 있다.
    생성자는 특별한 경우를 제외하고는 public을 적용한다.

  • setter의 경우에는 값을 변경할 때 사용한다.

예시)

Food 클래스로 멤버필드는 private로 생성한후. 외부에서 값을 불러올 getter와 setter를 생성하였다.


객체를 생성하여 만들어진 setter를 사용하면 ob1의 name은 "치킨"으로 수정이 된다.

3. 객체의 this란?

객체를 생성시에도 사용되는 this. 이라는게 있다. 생성자 메서드를 통하여 받아온 매개변수를 멤버필드로 저장할때 사용이 된적이 있다. 객체의 메서드를 사용할때도 필수적으로 사용이 되는부분이다.

먼저 클래스에서 멤버필드만 존재하고 메서드가 없는 상태를 예를들면.


멤버필드는 속성값만 있고, 두객체를 만들어 서로 공격하고 공격력만큼 Hp가 깎이는 구조로 표현하고 싶다고 한다면. 메인 클래스에서 (공격받는 객체의 hp = 공격받는 개체의 hp - 공격하는 객체의 atk) 순서로 표현하게 된다.

반면에 클래스내부에 공격하는 메서드가 정의된채로 실행하게 된다면.

매개변수로 타겟의 객체를 받고 메서드를 실행한 객체는 주체가 되어 this가 된다.
그로인해 변경할 타겟의 hp 를 공격하는 주체 this객체의 atk만큼 차감하는 식으로 정의 되며. 아래에서 ob1.attack(ob2); 를 실행 할수 있게 된다.

4. TV 클래스 구현해보기

TV라는 클래스를 생성하여, 그안에 전원 을 켜고 끄는 기능, 채널을 올리고 내리는 기능, 음량을 줄이고 높이는 기능 그리고 음소거 기능을 구현하기.


클래스에서 여러 기능을 잘 서술해 두었다면. 이를 사용자에게 보여줄 메인 화면에서는 실행코드만 사용되어 훨씬 간결해진다.

profile
우당탕탕 지금은 개발중

0개의 댓글