Java programming

(22.10.18)Java ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€(Interface), CallByValue, CallByReference, μ˜ˆμ™Έμ²˜λ¦¬

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2022. 10. 19.

**컴퓨터 κ΄€λ ¨ μ œν’ˆμ„ νŒλ§€ν•˜λŠ” μ‚¬μ΄λ“œμ—μ„œ μ—¬λŸ¬κ°€μ§€ μƒν’ˆ (Item)에 λŒ€ν•œ 정보λ₯Ό ν‘œμ‹œν•˜λ €κ³  ν•œλ‹€.

μƒν’ˆμ—λŠ” 마우슀, λ©”λͺ¨λ¦¬, 이어셋, 타블렛 등이 있으며, μ œν’ˆλͺ…, 가격, μ œμ‘°μ‚¬, 제쑰일 등은 λͺ¨λ“  μƒν’ˆμ— 곡톡적인 속성이닀. 마우슀의 κ²½μš°μ—λŠ” λ²„νŠΌμ˜ 갯수λ₯Ό λ³΄μ—¬μ£Όκ³ μžν•˜μ—¬, λ©”λͺ¨λ¦¬λŠ” λ©”λͺ¨λ¦¬ μ‚¬μ΄μ¦ˆλ₯Ό, 이어셋은 μ„ μ˜ 길이λ₯Ό, 타블렛은 ν‘œλ©΄μ˜ λ„ˆλΉ„μ— λŒ€ν•œ 정보λ₯Ό μΆ”κ°€μ μœΌλ‘œ 보여주렀고 ν•œλ‹€. 상속성, λ‹€ν˜•μ„±, μ€λ‹‰μ„±μ„μ‚¬μš©ν•˜μ—¬ κΈ°λŠ₯을 μ™„μ„±ν•˜κ³  ν…ŒμŠ€νŠΈν•΄λ³΄λΌ

λ‹€μ–‘ν•œ μ œν’ˆμ˜ 정보λ₯Ό 배열에 μ €μž₯ν•˜μ—¬ λͺ©λ‘μ„ ν‘œμ‹œν•˜λŠ” κΈ°λŠ₯을 μž‘μ„±ν•΄λ³΄μ‹œμ˜€


Main 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import com.ezen.javaoop.*;
 
public class InheritanceMain 
{
    public static void main(String[] args) 
    {
        Item[] it = new Item[4];
        it[0= new mouse("μ‚Όλ³΄λ§ˆμš°μŠ€"30000"심보","22λ…„5μ›”9일",3);
        it[1= new memory("κ°“λ©”λͺ¨λ¦¬"230000"μ‚Όμˆ­","22λ…„10μ›”17일",16);
        it[2= new earset("아이이어셋"80000"아이리보","21λ…„8μ›”7일",150);
        it[3= new tablet("μ•„μ΄νŒ¨λ“œ"600000"애퐁""21λ…„11μ›”2일",12);
    
        System.out.printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n",
                "이름","가격","μ œμ‘°μ‚¬","제쑰일","λΉ„κ³ ");
        for(int i = 0; i<it.length;i++) {
            System.out.print(it[i]);
        }
    }
}
cs

λΆ€λͺ¨ 클래슀 Item 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Item 
{
    private String name;
    private int price;
    private String producer;
    private String date;
    
    public Item() {}
    public Item(String name, int price, String producer,String date) {
        this.setName(name);       
        this.setPrice(price);
        this.setProducer(producer);
        this.setDate(date);
    }
    @Override
    public String toString() {
        String line = String.format("%s\t\t%d\t\t%s\t\t%s",name, price, producer,date );
        return line;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public String getProducer() {
        return producer;
    }
    public void setProducer(String producer) {
        this.producer = producer;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
}
cs

μžμ‹ 클래슀 mouse 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class mouse extends Item {
    private int btn;
    public mouse() {}
    public mouse(String name, int price, String producer,String date, int btn) {
        super(name, price, producer, date);
        this.setBtn(btn);
    }
    public int getBtn() {
        return btn;
    }
    public void setBtn(int btn) {
        this.btn = btn;
    }
    @Override
    public String toString() {
        String st = String.format("\t%d(%s)\n", btn,"λ²„νŠΌμˆ˜");
        return super.toString()+ st;
    }
}
cs

μžμ‹ 클래슀 memory 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class memory extends Item {
    private int size;
    public memory() {}
    public memory(String name, int price, String producer,String date, int size) {
        super(name, price, producer, date);
        this.setSize(size);
    }
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    @Override
    public String toString() {
        String st = String.format("\t%d(%s)\n", size,"λ©”λͺ¨λ¦¬ν¬κΈ°");
        return super.toString()+ st;
    }
}
cs

μžμ‹ 클래슀 earset 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class earset extends Item {
    private int length;
    public earset() {}
    public earset(String name, int price, String producer,String date, int length) {
        super(name, price, producer, date);
        this.setLength(length);
    }
    public int getLength() {
        return length;
    }
    public void setLength(int length) {
        this.length = length;
    }
    @Override
    public String toString() {
        String st = String.format("\t%d(%s)\n"length,"쀄길이");
        return super.toString()+ st;
    }
}
cs

μžμ‹ 클래슀 tablet 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class tablet extends Item {
    private int area;
    public tablet() {}
    public tablet(String name, int price, String producer,String date, int area) {
        super(name, price, producer, date);
        this.setArea(area);
    }
    public int getArea() {
        return area;
    }
    public void setArea(int area) {
        this.area = area;
    }
    @Override
    public String toString() {
        String st = String.format("\t%d(%s)\n", area,"λ„ˆλΉ„");
        return super.toString()+ st;
    }
}
cs

μ½˜μ†” κ°’:

abstract : λ°”λ”” μ—†λŠ” λ©”μ†Œλ“œμ— κΌ­ λ„£μ–΄ μ€˜μ•Όν•œλ‹€. μΆ”μƒλ©”μ†Œλ“œ

클래슀λ₯Ό μ„ μ–Έ 해놓고도 new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•œλ‹€. 객체λ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•œλ‹€.

좔상 λ©”μ†Œλ“œλ₯Ό 상속 λ°›μ•˜λ‹€λ©΄ μžμ‹ ν΄λž˜μŠ€μ—μ„œλŠ” λ°˜λ“œμ‹œ μ˜€λ²„λΌμ΄λ“œ ν•΄μ„œ λ°”λ””λ₯Ό μ™„μ„± μ§€μ–΄μ•Όν•œλ‹€.

객체λ₯Ό λ§Œλ“€λ €κ³  클래슀λ₯Ό μ•ˆλ§Œλ“€μˆ˜λ„ μžˆλ‹€ κ·Έμ € μƒμ†λ§Œ μ‹œμΌœμ€„ λͺ©μ μœΌλ‘œλ§Œ λ§Œλ“œλŠ” κ²½μš°λ„ μžˆλ‹€.

new Item[ ]; 배열객체 생성은 λ©”λͺ¨λ¦¬ λ°˜μ‘μ— 정보가 λ‘œλ“œλ˜λŠ”κ²Œ μ•„λ‹ˆλΌ μ°Έμ‘°λ₯Ό 담을 λ°°μ—΄λ§Œ μƒμ„±ν•˜λ―€λ‘œ κ°€λŠ₯ν•˜λ‹€.(객체 생성이 μ•„λ‹˜) 마우슀 λ©”λͺ¨λ¦¬ 이어셋등 각기 λ‹€λ₯Έ μžλ£Œν˜•μ˜ 객체λ₯Ό ν•œλ²ˆμ— 루프 돌렀주기 μœ„ν•΄μ„œ μ•„μ΄ν…œ 배열을 μ΄μš©ν•œλ‹€.


 

μΈν„°νŽ˜μ΄μŠ€(Interface)

 

클래슀, μΈν„°νŽ˜μ΄μŠ€, μΆ”μƒν΄λž˜μŠ€ 차이

ν΄λž˜μŠ€μ—” μ™„μ „ν•œ λ©”μ†Œλ“œλ§Œ μžˆλ‹€.

μΆ”μƒν΄λž˜μŠ€μ—” μΆ”μƒλ©”μ†Œλ“œκ°€ 1개 이상 μžˆλŠ” ν΄λž˜μŠ€λ‹€

μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상도가 훨씬 λ†’λ‹€. μΆ”μƒλ©”μ†Œλ“œλ‘œλ§Œ λ˜μ–΄μžˆλ‹€. abstractλž€ 단어λ₯Ό μ•ˆμ¨λ„ λœλ‹€.

λ©”μ†Œλ“œ ν•œκ°œ 짜리 μΈν„°νŽ˜μ΄μŠ€λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λΌκ³  λΆ€λ₯Έλ‹€.

 

extend 상속할 λ•Œ 씀

implements μΈν„°νŽ˜μ΄μŠ€ μ“Έ λ•Œ μ‚¬μš©


μ˜ˆμ‹œ)

Main 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
public class InterfaceMain 
{
    public static void main(String[] args) 
    {
        CharacterSample ch = new CharacterSample();
        ch.fire();
        
        Fireable f = (Fireable)ch;
        f.fire();
    }
}
cs

μΈν„°νŽ˜μ΄μŠ€ μ½”λ“œ

1
2
3
4
5
public interface Fireable 
{
    void fire();
}
 
cs

CharacterSample 클래슀 μ½”λ“œ

1
2
3
4
5
6
7
8
public class CharacterSample implements Fireable
{
 
    @Override
    public void fire() {
        System.out.println("λ°œμ‚¬ κΈ°λŠ₯ μž‘동");    
    }
}
cs

μ½˜μ†” κ°’:

λ°œμ‚¬ κΈ°λŠ₯ μž‘동
λ°œμ‚¬ κΈ°λŠ₯ μž‘동

클래슀 λͺ… μ˜†μ— >  implements Fireable  < 이 말을 λΆ™μ—¬ Fireable μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ°Έκ³ ν–ˆλ‹€λŠ” κ±Έ μ•Œ 수 μžˆλ‹€.

 


λ‚΄λΆ€ 클래슀 (Inner class)

μΈμŠ€ν„΄μŠ€ 멀버와 같은 λ°©λ²•μœΌλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성해야 ν•œλ‹€.


Call by Value

μ½˜μ†” κ°’:

sub 50
main 100

 

λ§Œμ•½ score μžμ²΄κ°€ λ°”λ€Œμ–΄ λ“€μ–΄κ°„λ‹€λ©΄ main score도 50으둜 값이 λ°”λ€Œμ—ˆμ„ 것이닀. ν•˜μ§€λ§Œ changeScore(score); μ—¬κΈ°μ„œ scoreλŠ” λ³€μˆ˜ κ·Έμžμ²΄κ°€ μ•„λ‹ˆλΌ λ³€μˆ˜μ•ˆμ— μžˆλŠ” κ°’λ§Œμ„ λ³΅μ‚¬ν•˜μ—¬ 쀀것이닀. 즉 100 κ°’λ§Œ λ“€μ–΄κ°€μ„œ νŒŒλΌλ―Έν„°λ₯Ό κ°–λŠ” λ‹€μŒ λ©”μ†Œλ“œλ‘œ κ°„λ‹€.


Call by Reference

μ½˜μ†” κ°’:

sub,[2, 4, 6, 8]
main,[2, 4, 6, 8]

 

C언어에선 Call by address

λ³Έν•¨μˆ˜μ— μžˆλŠ” 데이터λ₯Ό ν•˜μœ„ ν•¨μˆ˜μ—μ„œ μ‘°μž‘ν•˜κ³  싢을 땐 μ°Έμ‘° νƒ€μž…μœΌλ‘œ λ³΄λ‚΄μ•Όμ§€λ§Œ κ°€λŠ₯ν•˜λ‹€

numμ—λŠ” 4가지 μ›μ†Œλ₯Ό κ°–λŠ” λ°°μ—΄μ˜ μ°Έμ‘° 값을 μ €μž₯ν•˜κ³  있기 λ•Œλ¬Έμ— 이것을 λ³΄λ‚΄κ²Œ λœλ‹€.


**call by value , call by reference

λ³Έ λ©”μ†Œλ“œμ— μžˆλŠ” μ •μˆ˜μ˜ 값을 ν•˜μœ„ λ©”μ†Œλ“œμ—μ„œ λ³€κ²½ν•˜λ €κ³  ν•œλ‹€.

μ½˜μ†” κ°’:

main,150


μ˜ˆμ™Έμ²˜λ¦¬

ν”„λ‘œκ·Έλž¨μ΄ 개발자의 μ˜λ„λŒ€λ‘œ λ˜μ§€ μ•Šκ³  였λ₯˜κ°€ 생기면 비정상 μ’…λ£Œκ°€ λœλ‹€.

μ˜ˆμ‹œ)

숫자만 λ„£μ–΄μ•Όν•˜λŠ”λ° μ•ŒνŒŒλ²³ hλ₯Ό λ„£μœΌλ‹ˆ 비정상 μ’…λ£Œκ°€ λ˜μ—ˆλ‹€.

try ~catch 문을 μ¨μ„œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•΄μ€„ 수 μžˆλ‹€. InputMismatchExceptionλ₯Ό μž„ν¬νŠΈ ν•΄μ£Όκ³  μ˜ˆμ™Έμ²˜λ¦¬κ°€ 되면 λ©”μ†Œλ“œμ˜ μ’…λ£Œλ₯Ό μ‹œν‚¬ 수 μžˆλŠ” return을 써쀀닀. 였λ₯˜κ°€ λ‚˜μ˜¨ 상황에도 ν”„λ‘œκ·Έλž¨μ΄ λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ§€ μ•Šκ³  


**ν‚€λ³΄λ“œμ—μ„œ λ‘κ°œμ˜ 숫자λ₯Ό μž…λ ₯ν•œλ‹€.

첫번째 수둜 λ‘λ²ˆμ§Έ 수λ₯Ό λ‚˜λˆ—μ…ˆν•˜μ—¬ κ·Έ 결과식을 화면에 ν‘œμ‹œν•΄ λ³΄μ„Έμš”

λ§Œμ•½ 첫번째 μˆ˜κ°€ 0일 경우 μ–΄λ–€ ν˜„μƒμ΄ λ°œμƒν•˜λ©° μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν•  것인지 μ½”λ“œλ‘œ μž‘μ„±ν•˜λΌ

μœ„ μ½”λ“œμ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€λ©΄ μ΄μš©μžμ—κ²Œ λ‹€μ‹œ 두 수λ₯Ό μž…λ ₯ν•˜λ„λ‘ μ•ˆλ‚΄ν•˜κ³ , μ •μƒμ μœΌλ‘œ λ‚˜μ˜¬λ•Œ κΉŒμ§€ λ°˜λ³΅ν•œλ‹€.

 

λŒ“κΈ€