: '๊ฐ์ฒด๋ก ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ์งํฅํ๋ค'๋ ๋ป
๊ฐ์ฒด๋
: ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๊ฐ ๊ตฌ๋ถํด์ ์ธ์ํ ์ ์๋ ๋ชจ๋ ๊ฒ
: ์์ ์ ์์ฑ(๊ฐ, ๋ฐ์ดํฐ -> ๋ณ์)๊ณผ ๊ธฐ๋ฅ(๋์, ํ๋ -> ๋ฉ์๋)์ด ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ๊ตฌ๋ถ๋์ด ์๋ณ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
: ์ฌ๋(->class๊ฐ ๋จ)์ผ ๊ฒฝ์ฐ
-๋ณ์(๋ช
์ฌ) : ์ด๋ฆ, ๋์ด, ์๋
์์ผ, ํค, ๋ชธ๋ฌด๊ฒ, ์๋ ฅ, ์ฃผ๋ฏผ๋ฒํธ...
-๋ฉ์๋(๋์ฌ) : ๋ฐฅ์ ๋จน๋๋ค, ์ ์ ์๋ค, ์ถ๊ทผํ๋ค, ํด๊ทผํ๋ค...
: ๋ชจ๋ํฐ(->class๊ฐ ๋จ)์ผ ๊ฒฝ์ฐ
-๋ณ์ : ํฌ๊ธฐ, ํ์, ์ฃผ์ฌ์จ, ๋ฒํผ...
-๋ฉ์๋ : ํ๋ฉด์ ๋ณด์ฌ์ค๋ค, ๋ฐ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค, ํ๋ฉด์ ๋๋ค...
๊ฐ์ฒด ์งํฅ ์ธ์ด๋?
: ์ฌ๋ฌผ์ด๋ ๊ฐ๋
์ฒ๋ผ ๋
๋ฆฝ๋๊ณ ๊ตฌ๋ถ๋๋ ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ ธ์๊ณ , ๋ฐ์ํ๋ ๋ชจ๋ ์ฌ๊ฑด๋ค์ ๊ฐ์ฒด๊ฐ์ ์ํธ์์ฉ์ด๋ค. ์ด ๊ฐ๋
์ ์ปดํจํฐ๋ก ์ฎ๊ฒจ ๋์ ๋ง๋ค์ด๋ธ ๊ฒ์ด ๊ฐ์ฒด์งํฅ ์ธ์ด์ด๋ค.
์๋ฐ์์ ๊ฐ์ฒด๋??
: ํด๋์ค์ ์ ์๋ ๋ด์ฉ์ผ๋ก new ์ฐ์ฐ์๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ๋ ๊ฒ
package edu.kh.oop.abstraction.model.vo;
// VO(Value Object) : ๊ฐ ์ ์ฅ์ฉ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํด๋์ค๋ฅผ ๋ชจ์๋๋ ํจํค์ง
public class People { // ๊ตญ๋ฏผ(์ฌ๋) ํด๋์ค
// ํด๋์ค๋ : ๊ฐ์ฒด์ ํน์ฑ(์์ฑ, ๊ธฐ๋ฅ)์ ์ ์ํ ๊ฒ
// == ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๊ณ๋
// ์์ฑ == ๊ฐ == data
// ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์ ์ ์ธ
// -> ๊ตญ๋ฏผ์ด๋ผ๋ฉด ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ์์ฑ๋ง ์์ฑ(์ถ์ํ)
// ์ด๋ฆ, ์ฑ๋ณ, ์ฃผ๋ฏผ๋ฒํธ, ์ฃผ์, ์ ํ๋ฒํธ, ๋์ด
public String name;
public char gender;
public String pNo; // "000000-0000000"
public String address;
public String phone; // 010-0000-0000
public int age;
// public double bitCoin; -> ๊ณตํต์ ์ด ์๋๋ฏ๋ก ์ ๊ฑฐ
// ๊ธฐ๋ฅ == ํ๋ // method
public void tax() {
System.out.println("์ธ๊ธ์ ๋
๋๋ค.");
}
public void vote() {
System.out.println("ํฌํ๋ฅผ ํฉ๋๋ค. ๊ผญํ์ธ์!");
}
}
package edu.kh.oop.abstraction.model.service;
import edu.kh.oop.abstraction.model.vo.People;
// Service : ํน์ ๊ธฐ๋ฅ(๋น์ฆ๋์ค ๋ก์ง)์ ์ ๊ณตํ๋ ํด๋์ค
public class AbstractionService {
public void ex1() {
// ๊ตญ๋ฏผ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
People p1 = new People(); // ํจํค์ง๊ฐ ๋ค๋ฅด๊ธฐ๋๋ฌธ์ import ํด์์ผํจ
// People p1 : People ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์ ์ฅํ์ฌ ์ฐธ์กฐํ๋ ๋ณ์ p1์ ๋ง๋ฌ
// new People() : ์๋ก์ด People ๊ฐ์ฒด๋ฅผ Heap ์์ญ์ ์์ฑํ ๊ฒ
// **ํด๋์ค ์ด๋ฆ์ด ์๋ฃํ์ฒ๋ผ ์ฌ์ฉ๋๋ค.
// ** ๊ทธ๋์ ํด๋์ค๋ฅผ "์ฌ์ฉ์ ์ ์ ์๋ฃํ"์ด๋ผ๊ณ ํ๋ค! **
p1.name = "ํ๊ธธ๋";
p1.age = 25;
p1.gender = '๋จ';
p1.phone = "010-1234-5678";
p1.pNo = "200303-1234567";
p1.address = "์์ธ์ ์ค๊ตฌ ๋จ๋๋ฌธ๋ก 120 ๋์ผ๋น๋ฉ 3์ธต E๊ฐ์์ฅ";
// p1.์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ง์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์บก์ํ(์ ๋ณด์๋)์ด ์ ํ ๋์ง ์์ ์ํ์ด๋ค.
// ์ค์ ๋ก๋ ์ด๋ ๊ฒ ์ฝ๋ฉํ์ง ์๋๋ค.
System.out.println("p1.name : " + p1.name);
System.out.println("p1.age : " + p1.age);
System.out.println("p1.gender : " + p1.gender);
System.out.println("p1.phone : " + p1.phone);
System.out.println("p1.pNo : " + p1.pNo);
System.out.println("p1.address :" + p1.address);
}
}
: ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผ์ ํ์ ์์น์ผ๋กํ๋ค.
: ํด๋์ค ์ธ๋ถ์์ ๋ฐ์ดํฐ์ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ง๊ณ , ๋์ ๊ฐ์ ์ ์ผ๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋๋ก ๋ฉ์๋๋ฅผ ํด๋์ค ๋ด๋ถ์ ์์ฑํ๋ ๋ฐฉ๋ฒ(๊ฐ์ ์ ๊ทผ)
: getter / setter ์ด์ฉ
package edu.kh.oop.abstraction.model.vo;
public class People { // ๊ตญ๋ฏผ(์ฌ๋) ํด๋์ค
private String name;
private char gender;
private String pNo; // "000000-0000000"
private String address;
private String phone; // 010-0000-0000
private int age;
// ***๋ฐ์ดํฐ ์ง์ ์ ๊ทผ ์ ํ***
// public(๊ณต๊ณต์) -> private(์ฌ์ ์ธ, ๊ฐ์ธ์ ์ธ)์ผ๋ก ๋ณ๊ฒฝ
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getpNo() {
return pNo;
}
public void setpNo(String pNo) {
this.pNo = pNo;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// ์บก์ํ์์ ์ฌ์ฉํ ๊ฐ์ ์ ๊ทผ ๊ธฐ๋ฅ(getter/setter)
// alt + shift + s / ๋๋ ์๋จ Source ํญ
//-> Generate getters / setters ํด๋ฆญ -> select all -> generate
}
package edu.kh.oop.abstraction.model.service;
import edu.kh.oop.abstraction.model.vo.People;
public class AbstractionService {
//p1.name = "ํ๊ธธ๋";
p1.setName("ํ๊ธธ๋"); // setter
//p1.age = 25;
p1.setAge(25);
//p1.gender = '๋จ';
p1.setGender('๋จ');
//p1.phone = "010-1234-5678";
p1.setPhone("010-1234-5678");
//p1.pNo = "200303-1234567";
p1.setpNo("010-1234-5678");
//p1.address = "์์ธ์ ์ค๊ตฌ ๋จ๋๋ฌธ๋ก 120 ๋์ผ๋น๋ฉ 3์ธต E๊ฐ์์ฅ";
p1.setAddress("์์ธ์ ์ค๊ตฌ ๋จ๋๋ฌธ๋ก 120 ๋์ผ๋น๋ฉ 3์ธต E๊ฐ์์ฅ");
// p1.00 = 00;๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ์ง์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์บก์ํ(์ ๋ณด์๋)์ด ์ ํ ๋์ง ์์ ์ํ์ด๋ฏ๋ก ๊ฐ์ ์ ๊ทผ ๋ฐฉ์(setter / getter)์ผ๋ก ์ด์ฉํ์ฌ ๊ฐ์ ธ์จ๋ค.
System.out.println("p1.name : " + p1.getName()); // getter
System.out.println("p1.age : " + p1.getAge());
System.out.println("p1.gender : " + p1.getGender());
System.out.println("p1.phone : " + p1.getPhone());
System.out.println("p1.pNo : " + p1.getpNo());
System.out.println("p1.address :" + p1.getAddress());
System.out.println();
People p2 = new People();
p2.setName("์ต์ง์");
p2.setGender('์ฌ');
p2.setpNo("222222-2222222");
p2.setAddress("์์ธ ์ค๊ตฌ ๋จ๋๋ฌธ๋ก 120");
p2.setPhone("010-5555-5555");
p2.setAge(30);
System.out.println("p2 name : " + p2.getName());
System.out.println("p2 gender : " + p2.getGender());
System.out.println("p2 pNo : " + p2.getpNo());
System.out.println("p2 address : " + p2.getAddress());
System.out.println("p2 phone : " + p2.getPhone());
System.out.println("p2 age : " + p2.getAge());
}
}
: new ์ฐ์ฐ์์ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ ์ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ก ๋ค๋ฅธ ์๋ฃํ์ ๋ฐ์ดํฐ๊ฐ ์ฐ์์ผ๋ก ๋์ด/ํ ๋น๋ ๊ฐ์ฒด ๊ณต๊ฐ -> ์ธ์คํด์ค
-public : ๋๊ตฌ๋ ์ธ ์ ์์. ์ด๋์๋ ์ง import ๊ฐ๋ฅ
-default : ์ธ๋ถ ํจํค์ง์์ ์ฌ์ฉ ๋ชปํจ(์ ๊ทผ๊ธ์ง). ๊ฐ์ ํจํค์ง ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
: ์บก์ํ ์์น์ ์ํด ํด๋์ค์ ๋ฉค๋ฒ๋ณ์์ ๋ํ ์ ๊ทผ ๊ถํ์ private์ ์์น์ผ๋ก ํ๋ค.
: ์์ฑ์์ ์ ์ธ์ ๋ฉ์๋ ์ ์ธ๊ณผ ์ ์ฌํ๋ ๋ฐํ ๊ฐ์ด ์์ผ๋ฉฐ ์์ฑ์๋ช ์ ํด๋์ค๋ช ๊ณผ ๋๊ฐ์ด ์ง์ ํด์ฃผ์ด์ผ ํจ
[์ ๊ทผ์ ํ์][์์ฝ์ด] class ํด๋์ค๋ช
{
[์ ๊ทผ์ ํ์] ํด๋์ค๋ช
() { }
[์ ๊ทผ์ ํ์] ํด๋์ค๋ช
(๋งค๊ฐ๋ณ์) { (this.)ํ๋๋ช
= ๋งค๊ฐ๋ณ์; }
}
: ์์ฑ์๋ฅผ ์์ฑํ์ง ์์ ๊ฒฝ์ฐ, ํด๋์ค ์ฌ์ฉ ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์ ์์ฑ
: ๊ฐ์ฒด ์์ฑ ์ ์ ๋ฌ๋ฐ์ ๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ๊ธฐ ์ํด ์ฌ์ฉ
: ๋งค๊ฐ๋ณ์ ์์ฑ์ ์์ฑ ์ ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ์ง ์์
: ์์์์ ์ฌ์ฉ ์ ๋ฐ๋์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์์ฑ
: ์ค๋ฒ๋ก๋ฉ์ ์ด์ฉํ์ฌ ์์ฑ
๊ธ ์ ๋ดค์ต๋๋ค.