• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Java] 25. getter/setter 메서드
        2024년 04월 17일
        • Song hyun
        • 작성자
        • 2024.04.17.:45
        728x90
        반응형

        [Java] 25. getter/setter 메서드

         

        인스턴스화 된 객체의 변수를 외부에서 직접 조작시, 

        값이 덮어쓰여지거나 예상치 못한 결과(오류)가 발생할 수 있다.

         

        이런 위험을 방지하기 위해,

        객체 지향 패러다임에서는 객체를 직접 초기화하는 것이 아닌

        주로 특정 기능/메서드를 통해 조작한다. 

         

        getter/setter 메서드는 그런 기능/메서드의 대표적인 예라고 할 수 있다.

         

         

         

        1. getter/setter 메서드

        (1) getter: 외부에서 객체의 값을 읽을 때 사용된다. (get)

        객체의 상태변수를 return 한다.

         

        (2) setter: 외부에서 객체의 값을 초기화할 때 사용된다. (set)

        멤버 변수에 접근해서, 객체의 상태값을 변하게 한다. 리턴 타입은 void이다.

         

         

         

         

        2. 왜 getter/setter 메서드를 사용할까?

        -변수에 직접 접근해 초기화하는 것과, 기능(메서드)를 사용해 값을 초기화하는 것에는 큰 차이가 있다.

        -getter/setter 메서드를 사용하면, 메서드 내부에 방어적 코드를 구현할 수 있다. (private 사용)

        이를 통해 범주 이외의 값이 입력되는 것을 사전에 막을 수 있다. (=정보 은닉!)

        -getter/setter 메서드를 사용하면 클래스와 메서드 간의 관계를 사용해, 객체 지향 패러다임에 가깝게 코드를 구현할 수 있다.

         

         

         

        3. getter/setter 메서드 구현하기

        (1) getter/setter 메서드를 구현할 때는 보통 get(변수)형식으로 이름을 짓는다.

        (2) 카멜 노테이션(첫 단어는 소문자로, 두번째 단어부터 첫 글자를 대문자로 표기하는 방식)을 차용한다. 

         

        (3) getter 메서드 구현하기: 변수의 값을 읽어오기

        -public 리턴자료형 get변수명(){

            return this.변수명}

         

        (4) setter 메서드 구현하기: 변수의 값을 초기화하기

        -public void set변수명(자료형 변수명){

            *변수에 따라, 중요한 변수라면 방어적 코드를 작성하자.

            클래스 변수명=변수명;}

         

        -----------------

         

        아래의 코드를 살펴보자.

        Hero 라는 클래스 파일 내부에 name, hp, power,defense 등의 변수를 선언했다. 

        그리고 외부의 접근을 막기 위해 변수들의 접근 제어자를 private으로 지정했다. 

        다른 파일에서 변수들에 접근하고, 초기화할 수 있도록 getter/setter 메서드를 선언한 것을 볼 수 있다.

         

        주의해야할 것은 setter 메서드이다.

        체력, 공격력, 방어력을 의미하는 변수 hp,power,defense의 경우 정수형으로 선언되었음을 볼 수 있는데,

        사용자가 0 이하의 값을 입력하면 곤란할 것이다.

         

        if문을 사용하여, 사용자가 0 미만의 값을 입력하면 값이 입력되지 않고, 안내 메세지를 출력하게 했다.

        else의 경우에만 값이 초기화되니, setter 메서드를 사용하면 안전히 값을 입력받을 수 있다는 것을 알 수 있다! 

         

         


         

        연습문제 1.

        (1) Hero 클래스를 만들어라.

        -클래스 내부에 변수와 getter/setter 메서드를 선언하라.

        (2) HeroTest 파일을 만들고, getter/setter 메서드를 호출, 출력해라.

         

        풀이 과정

        (1) Hero 클래스를 생성한다. 클래스 내부에 이름, 체력, 공격력, 방어력 등의 변수들을 선언한다.

         

        (2) 선언한 변수들의 접근 제어자를 private으로 지정한다.

         

        (3) getter/setter 메서드를 클래스 내부에 선언한다.

        -접근 제어자 private은 해당 변수/함수/메서드가 해당 클래스 내에서만 열리게 하기 때문에,

        다른 파일에서는 해당 변수에 접근/수정이 불가능하다.

        이는 getter/setter 메서드를 작성하는 하나의 이유이기도 하다!

        *체력, 공격력, 방어력 등의 변수(int형 변수)는 음수가 되면 안 된다.

        따라서 변수를 초기화하는 getter 메서드 내에, if문을 사용하여 방어적 코드를 작성하는 것이 좋다.

         

        (4) Herotest 파일을 생성한다. 

        -Hero hero1=new Hero();를 통해 새로운 객체를 선언한다.

        -getter/setter 메서드를 통해 hero1이라는 객체의 변수에 접근하거나, 수정할 수 있다.

         

         

        차례대로 Hero 클래스, TestHero 파일이다.

        package basic.ch10;
        
        public class Hero {
        	private String name;
        	private int hp;
        	private int power;
        	private double defense;
        	private boolean isDie;
        
        	// getter 메서드
        	public String getName() {
        		return this.name;
        	}
        
        	public int getHp() {
        		return this.hp;
        	}
        
        	public int getPower() {
        		return this.power;
        	}
        
        	public double getDefense() {
        		return this.defense;
        	}
        
        	// setter 메서드
        	public void setName(String setName) {
        		name = setName;
        	}
        
        	public void sethp(int setHp) {
        		if (setHp < 0) {
        			System.out.println("잘못된 입력입니다.");
        		} else {
        			hp = setHp;
        		}
        	}
        
        	public void setPower(int setPower) {
        		if (setPower < 0) {
        			System.out.println("잘못된 입력입니다.");
        		} else {
        			power = setPower;
        		}
        	}
        
        	public void setDefense(int setDefense) {
        		if (setDefense < 0) {
        			System.out.println("잘못된 입력입니다.");
        		} else {
        			defense = setDefense;
        		}
        	}
        
        }
        package basic.ch10;
        
        public class TestHero {
        	public static void main(String[] args) {
        		Hero hero1 = new Hero();
        		hero1.setName("아이언맨");
        		hero1.sethp(100);
        		hero1.setDefense(-100);
        
        		double a = hero1.getDefense();
        		System.out.println(a);
        	}
        
        }
        728x90
        반응형

        'Java' 카테고리의 다른 글

        [Java] 27. Java로 스타크래프트 모델링하기  (0) 2024.04.18
        [Java] 26. 참조 변수 this, this의 3가지 용법  (0) 2024.04.18
        [Java] 24. 접근 제어 지시자와 정보 은닉  (0) 2024.04.17
        [Java] 23. 개념 응용하기: 함수와 메서드를 이용한 응용문제  (0) 2024.04.16
        [Java] 22. 객체 지향 패러다임  (0) 2024.04.16
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바