1. ์ ๋ค๋ฆญ ํด๋์ค๊ฐ ๋ฐ์ ์ ์๋ ์ธ์ ์๋ฃํ์ ์ ํ ๊ฑฐ๋ ๊ฒ
(1) ์ฌ์ ์ค๋น - ์ฐ๋ฆฌ๊ฐ ๋ฐ๊ณ ์ถ์ ํน์ ์๋ฃํ์ ํด๋์ค๋ก ๋ง๋ ๋ค.
//1. ๋ถ๋ชจ ํด๋์ค
public class User {
public String name;
public User(String name) {
this.name = name;
}
public void addPoint(){
System.out.println(this.name + " ๋, ํฌ์ธํธ ์ ๋ฆฝ๋์์ต๋๋ค. ");
}
}
//2. ์์ ํด๋์ค
public class VIPUser extends User {
public VIPUser(String name) {
//๋ถ๋ชจ์ ์์ฑ์๋ฅผ ์ฐ๊ฒ ๋ค๋ ๋ง : super(); , ๋ถ๋ชจ์ ๋งค์๋๋ฅผ ์ฐ๊ฒ ๋ค๋ ๋ง super.๋งค์๋_์ด๋ฆ;
// name์ ๋ฃ์ผ๋ฉด, ์์ "ํน๋ณํ"์ด๋ผ๋ ๋ง์ด ๊ฐ์ด ์ธ์คํด์ค ๋ณ์์ ๋ค์ด๊ฐ๋๋ก ์กฐ์น
super("ํน๋ณํ " + name);
}
}
(2) ์๋ฃํ ๊ฐ๋ ค ๋ฐ์ ์ ์๋ ์ ๋ค๋ฆญ์ค ํด๋์ค ์์ฑ!
// ๋ฐ์ ์ ์๋ ์ธ์ ์ ํ:
// T extends User = User๋ User๋ฅผ ์์๋ฐ์ ์์ ํด๋์ค๋ง ์ธ์๋ก ๋ฐ์๋ค์ด๊ฒ ๋ค.
public class CoffeeByUser <T extends User>{
//User ๊ณ์ด์ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค ๋ณ์๋ก ๋ฐ๊ฒ ๋ค.
public T user;
public CoffeeByUser (T user) {
this.user = user;
}
// ๋ณ์๋ก ๋ฐ์ ๊ฐ์ฒด ์์ ๋ณ์์ ๋งค์๋๋ฅผ ์ด์ฉํ ๊ฒ์.
public void ready(){
System.out.println("์ปคํผ ์ค๋น ์๋ฃ : " + user. name);
user.addPoint();
}
}
(3) ์ ๋ค๋ฆญ ํด๋์ค ์ ์ธ
//<> ์์๋ ์ฐ๋ฆฌ๊ฐ ์ธ ์๋ฃํ์ ๋ํด ์ฐ๋ฉด ๋๋ค.
// ๋๋ฒ์งธ ๋
์์ VIPUser๋ฅผ ์ฐ๋๊น ๊บฝ์ ์์ <VIPUser>๋ก ์จ๋ ๋๋ค.
//()์์ ์์ฑ์์ ํ์ํ ์์๋ฅผ ์ฐ๋ฉด ๋๋๋ฐ, ์ธ์์ User๋ ๊ฐ์ฒด ์์ฑ ์ ์ธ์๊ฐ ํ์ํ๋ฏ๋ก,
// ์ด์ค์ผ๋ก ๋ค์ด๊ฐ๋ค.
// ์ด๊ฑด ๋ค์ด์ฌ ์ธ์์ ๋ํ ๊ฒ์ด๋ฏ๋ก,
//๋ถ๋ชจ ํด๋์ค์ ์ฐธ์กฐ๋ณ์๋ก ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฅดํค๋ ๋คํ์ฑ์ ์๋ฆฌ์ ๋ค๋ฅด๋ค.
CoffeeByUser<User> c7 = new CoffeeByUser<>(new User("๊ฐํธ๋"));
c7.ready();
CoffeeByUser<User> c8 = new CoffeeByUser<>(new VIPUser("์์ฅํ"));
c8.ready();
<๊ฒฐ๊ณผ ๊ฐ>
์ปคํผ ์ค๋น ์๋ฃ : ๊ฐํธ๋
๊ฐํธ๋ ๋, ํฌ์ธํธ ์ ๋ฆฝ๋์์ต๋๋ค.
์ปคํผ ์ค๋น ์๋ฃ : ํน๋ณํ ์์ฅํ
ํน๋ณํ ์์ฅํ ๋, ํฌ์ธํธ ์ ๋ฆฝ๋์์ต๋๋ค.
2. ์ ๋ค๋ฆญ ๋งค์๋์ ์ธ์๋ฅผ 2๊ฐ ์ด์ ๋ฐ์ ๋ ์ด๋ป๊ฒ ํ๋ ์ง
(1) ์ผ๋ฐ์ ์ธ ์ ๋ค๋ฆญ ๋งค์๋ ๋ณต์ต
*์ ์ธ
// ์ธ์์ ์๋ฃํ์ ๋ง๊ฒ, ๊ธฐ๋ฅํ๊ฒ ๋์ด์์.
public static <T> void orderCoffee(T name) {
System.out.println("์ค๋น ์๋ฃ: " + name );
}
*ํธ์ถ
orderCoffee("๊น์์ฒ ");
orderCoffee(36);
<๊ฒฐ๊ณผ>
์ค๋น ์๋ฃ: ๊น์์ฒ
์ค๋น ์๋ฃ: 36
(2) ์ธ์๊ฐ ๋ ๊ฐ ์ด์ ์ฐ์ด๋ ์ ๋ค๋ฆญ ๋งค์๋
*์ ์ธ
public static <T,V> void orderCoffee(T name, V coffee) {
System.out.println(coffee + " ์ปคํผ ์ค๋น ์๋ฃ: " + name );
}
*ํธ์ถ
orderCoffee("๊นํฌ์ฒ ", "์๋ฉ๋ฆฌ์นด๋
ธ");
orderCoffee(37, "๋ผ๋ผ");
<๊ฒฐ๊ณผ>
์๋ฉ๋ฆฌ์นด๋
ธ ์ปคํผ ์ค๋น ์๋ฃ: ๊นํฌ์ฒ
๋ผ๋ผ ์ปคํผ ์ค๋น ์๋ฃ: 37
3. ์ค์ค๋ก ๋ณ์ ๋ฐ๊ฟ๊ฐ ํด๋ณด๊ธฐ
public class Customer {
public String name;
public String PhoneNumber;
public Customer(String name, String Number) {
this.name = name;
this.PhoneNumber = Number;
}
public void Call() {
System.out.println(name + "๋์ ์ ํ๋ฒํธ " + PhoneNumber + "๋ก ์ฐ๋ฝํ๊ฒ ์ต๋๋ค.");
}
}
public class Vip extends Customer{
public Vip(String name, String Number) {
super("์ฅ๊ธฐ ์ด์ฉ ํ์์ด์ " +name, Number);
}
}
public class Call_Our_Customer <T extends Customer> {
public T Customer;
public Call_Our_Customer(T User){
this.Customer = User;
}
public void AutoCall (){
System.out.println("call to " + Customer.name + "his PhoneNumber is " + Customer.PhoneNumber);
Customer.Call();
}
}
import WorkOut_Myself.Customer.Call_Our_Customer;
import WorkOut_Myself.Customer.Customer;
import WorkOut_Myself.Customer.Vip;
public class Generics_Myself {
public static void main(String[] args) {
Call_Our_Customer<Customer> c1 = new Call_Our_Customer<>(new Customer("๊น๊ณ๋","010***52091"));
Call_Our_Customer<Vip> c2 = new Call_Our_Customer<>(new Vip("ํํํ", "0101*456790"));
c1.AutoCall();
c2.AutoCall();
}
}
0