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());
}
}
컴파일