전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

[자바/JAVA] 프로그래밍 - 클래스(Class) 2.캡슐화

2023. 6. 5. 18:46

7. 캡슐화 과정까지 적용해서 완벽한 클래스의 형태를 갖추게함!!


캡슐화 : 추상화를 통해 정의된 속성들과 기능들을 하나로 묶어 관리하는 기법중 하나로
클래스에서 가장 중요한 목적인 "데이터의 접근 제한" 을 원칙으로
외부로부터 "데이터의 직접 접근"을 막고 
대신에 "데이터를 간접적으로나마 처리(값을 대입, 값을 돌려준다거나)" 할 메소드를 클래스 내부에 작성해서 관리

 

1) 정보은닉 : private

직접접근을 막기위해 private 라는 접근제한자 사용

 

2) setter / getter 메소드 만들어야함!!

private 하는 순간 필드에 직접접근 불가!!

setter 메소드 : 해당 필드에 대입시키고자 하는 값 전달받아서 해당 필드에 대입시켜주는 메소드

getter 메소드 : 해당 필드에 담긴값을 반환해주는 메소드

 

메소드 

[표현법]
접근제한자 [예약어] 반환형 메소드명([매개변수]){
...실행할 코드
}

public void method1(int a) {	// int a 매개변수 : 전달되는 변수
    int b = 10;	// 일반변수
}

- setter 메소드 : 해당 필드에 대입시키고자 하는 값 전달 받아 해당 필드에 대입시켜주는 기능의 메소드

public void setName(String newName) { // 매개변수 : 해당 메소드 호출시 전달값을 받아주기 위한 변수 선언문
    name = newName;
}

public void setName(String name) {	// 위 표현도 맞지만 이게 관례적인 표현
//	name = name;	//  -> 매개변수 name = 매개변수 name; 형식
                    // 필드명과 매개변수명이 동일한 시점에서는 해당 메소드 영역에서 만들어진 변수가 우선순위가 높음
    				
    this.name = name;	// 필드 name = 매개변수 name; 원함 -> 변수앞에 this.을 붙여준다.
}

-getter 메소드 : 해당 필드에 담긴 값을 반환해주는 역할을 수행

public String getName() {	// void 아니다. 어떤 자료형을 던져줄지 써야함
    return name;
}

학생이라는 클래스를 만들어보자.

package com.kh.chap02_encapsulation.model.vo;

public class Student {	// 나만의 자료형 
	
	// 필드부 
	// 접근제한자 자료형 변수명
	private String name;
	private int age;
	private double height;
	private int korScore;
	private int mathScore;
	
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public void setKorScore(int korScore) {
		this.korScore = korScore;
	}
	public void setMathScore(int mathScore) {
		this.mathScore = mathScore;
	}
	
	// - getter 메소드
	// 해당 필드에 담긴 값을 반환해주는 역할을 수행
	
	public String getName() {	// void 아니다. 어떤 자료형을 던져줄지 써야함
		return name;
	}
	public int getAge() {
		return age;
	}
	public double getHeight() {
		return height;
	}
	public int getKorScore() {
		return korScore;
	}
	public int getMathScore() {
		return mathScore;
	}
}

학생 클래스를 사용하여 moon이라는 객체를 생성하고, 데이터를 삽입해보자

package com.kh.chap02_encapsulation.run;

import com.kh.chap02_encapsulation.model.vo.Student;

public class EncapsulationRun {
	
	public static void main(String[] args) {
		Student moon = new Student();
		
		moon.setName("문동은");
		moon.setAge(20);
		moon.setHeight(162.3);
		moon.setKorScore(100);
		moon.setMathScore(90);
		
		System.out.println(moon.getName());
		System.out.println(moon.getAge());
		System.out.println(moon.getHeight());
		System.out.println(moon.getKorScore());
		System.out.println(moon.getMathScore());

		// 수정하고 싶다면? 
		System.out.println("====수정 후====");
		moon.setAge(25);
		
		System.out.println(moon.getAge());
	}

}

컴파일


person 객체를 생성
아이디, 비밀번호, 이름, 나이, 성별, 전화번호, 이메일의 값을 넣고 출력해보자

person Class

package com.kh.chap03_class.model.vo;

public class Person {
// 필드 선언
private String id;
private String pwd;
private String name;
private int age;
private char gender;
private String phone; // 010-1111-2222
private String email;

// setter 메소드 (7개)
public void setId(String id) {
    this.id = id;
}

public void setPwd(String pwd) {
    this.pwd = pwd;
}

public void setName(String name) {
    this.name = name;
}

public void setAge(int age) {
    this.age = age;
}

public void setGender(char gender) {
    this.gender = gender;
}

public void setPhone(String phone) {
    this.phone = phone;
}

public void setEmail(String email) {
    this.email = email;
}

// getter 메소드 (7개)

public String getId() {
    return id;
}

public String getPwd() {
    return pwd;
}

public String getName() {
    return name;
}

public int getAge() {
    return age;
}

public char getGender() {
    return gender;
}

public String getPhone() {
    return phone;
}

public String getEmail() {
    return email;
}

// 정보를 출력해주는 information 메소드
public String information() {
    return "Id : " + id + ", Pwd : " + pwd + ", Name : " + name+ ", Age : " + age + ", Gender : " + gender + ", Phone : " + phone + ", email : " + email;
}

}

실행 클래스

package com.kh.chap03_class.run;

import com.kh.chap03_class.model.vo.Person;
import com.kh.chap03_class.model.vo.Product;

public class ClassRun {
	public static void main(String[] args) {
		
		Person p = new Person();
		
		System.out.println(p.getId());
		System.out.println(p.getAge());
		System.out.println(p.getGender());
		
		// 생성 후에 필드에 담긴값을 곧바로 알아보면
		// JVM이 초기화(값 세팅)까지 진행해줬음!!
		
		
		p.setId("user01");
		p.setPwd("pwd01");
		p.setName("이원종");
		p.setAge(25);
		p.setGender('M');
		p.setPhone("010-1234-5678");
		p.setEmail("wonjong@gmail.com");
		
		System.out.println("=== 값 대입후 ===");
		System.out.println(p.getId());
		System.out.println(p.getPwd());
		System.out.println(p.getName());
		System.out.println(p.getAge());
		System.out.println(p.getGender());
		System.out.println(p.getPhone());
		System.out.println(p.getEmail());
		// 위의 코드는 너무 귀찮다. 그래서 information 메소드를 생성하고 간단하게 출력해보자.
		System.out.println("=== 메소드 만들고 난 후 ===");
		System.out.println(p.information());
		
	}
}

컴파일

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - 클래스(Class) 실습 예제
    • [자바/JAVA] 프로그래밍 - 클래스(Class)
    • [자바/JAVA] 프로그래밍 - 클래스(Class) 1.추상화
    • [자바/JAVA] 프로그래밍 - 배열(Array) 실습 예제
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바