티스토리 뷰

클래스  / 메소드

 

- 프로그램의 설계도 같은 의미

- 클래스에는 속성(변수)과 기능(메소드)가 존재한다. ( 하나의 클래스를 정의해놓으면 재사용성이 높아진다는 장점이 있다. )

- 하나의 파일에 하나의 클래스만 존재해야하며, 인스턴스가 되기 위해서는 속성과 기능이 있어야한다.

  • 객체(인스턴스 필드) : 클래스를 인스턴스화 시킨 것이다.

- 하나의 클래스는 여러개의 객체가 될 수 있다. (인스턴스 = 객체)

- 객체로 만들어지게 되면 각 인스턴스마다 필드(멤버변수)에 접근할 수 있게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
        Pet dog = new Pet();
                Pet cat = new Pet();
                
        dog.type = "개";
        dog.name = "바둑이";
        cat.type = "고양이";
        cat.name = "나비";
 
        System.out.println("애완 동물의 종류는 " + dog.getType() + "이고, 이름은 " + dog.getName() + "입니다.");
        System.out.println("애완 동물의 종류는 " + cat.getType() + "이고, 이름은 " + cat.getName() + "입니다.");
 
    
cs
  • 클래스 필드 (static)  

- 클래스의 인스턴스 필드는 인스턴스가 개별로 가지는 메모리에 데이터를 쓸 수 있는 필드이지만 

클래스 필드는 클래스가 가지는 메모리에 데이터를 쓸 수 있는 필드를 의미

- 인스턴스화 시킬 필요가 없다.

- 인스턴스가 아니더라도 외부에서 접근 가능하다.

▼ 클래스 필드 선언, 사용

1
2
3
4
5
6
7
    /**
     * 만들 수 있는 애완동물의 수
     */
    public static int petCount = 2
    // 인스턴스를 만들지 않아도 변수를 쓸수 있고, 인스턴스를 만들지 않아도 기능을 쓸 수 있다.
    //static은 메모리가 독립되어 있다. 
    //상수를 만들때 static이라는 키워드가 반드시 들어간다.
cs

 

1
2
3
4
5
6
        Pet dog = new Pet();
        dog.petCount++;
        
        Pet cat = new Pet();
        cat.petCount++;
        
cs

 

  •  생성자 : 인스턴스 생성시 딱 한번만 호출되는 메소드

- 인스턴스의 초기화를 목적으로 정의되는 메소드

- 클래스명과 동일한 메소드를 기본으로 제공한다.

- 인스턴스의 초기화와 멤버변수의 초기화를 동시에 할 수 있다.

메소드 만드는 방법 :

Public void pet() { }

접근제어지시자 리턴타입 함수이름

 

생성자 만드는 방법 :

Public Pet() { }

여기서 Pet() method가 아니라 리턴타입 이다.

 

1
2
3
4
5
6
    public static void main(String[] args){
        
        EggMarket market = new EggMarket(); 
        market.start();
        
    }
cs

 

1
2
3
4
5
6
    public Seller(int money, int dambaeCount, int dambaePrice) { //생성자는 클래스명과 같아야한다.
        this.setMoney(money);
        this.setDamBaeCount(dambaeCount);
        this.setDamBaePrice(dambaePrice);
    }
    

cs

 

 

 

1
    Seller DamBaeSell = new Seller (50000102000);
cs

 

  • 메소드

- 반환값이 있는 메소드

1
2
3
4
5
6
7
8
9
 
    public boolean checkInven(Customer customer) { // boolean, int, double... 등으로 만들어진 메소드는 반환값이 존재해야한다.
 
        if (this.dambaeCount == 0 || customer.getMoney() < this.dambaePrice) { 
            System.out.println("장사 그만");
            return false;
        }
        return true;
    }
cs

 

- 반환값이 없는 메소드

1
2
3
4
5
6
    public void giveRemain( int money, int dambaeCount, Customer customer ) { 
        int remain = money - ( dambaeCount * this.dambaePrice);
        this.money -= remain;
        customer.takeMoney(remain);
        System.out.println("거스름돈 " + remain + "원 이야");
    }
cs

     

  • Method Overloading

- 한 클래스에 동일한 이름과 반환타입을 가진 method이다.

- 단, 매개변수의 유형, 개수가 다를 때 각 메소드는 다른 메소드로 인식한다.

- 생성자도 Overloading 될 수 있다.

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
    /**
     * 각 음료의 수량을 얻어온다.
     * @param drinkNumber 
     * @return
     */
    public int getDrinkQuantity( int drinkNumber ) {
        
        if ( drinkNumber == 1 ) {
            return getDrinkQuantity(this.cola, "콜라"); //오버로딩 됨
        }
        else if ( drinkNumber == 2 ) {
            return getDrinkQuantity(this.sprite, "스프라이트");
        }
        else if ( drinkNumber == 3 ) {
            return getDrinkQuantity(this.fanta, "환타");
        }
        
        return 0;
    }
    
    private int getDrinkQuantity( String drinks[], String drinkName ) { //오버로딩 사용
        
        int drinkQuantity = 0;
        for ( String drink : drinks ) {
            
            if ( drink.equals(drinkName) ) {
                drinkQuantity++;
            }
            
        }
        return drinkQuantity;
    }
cs

 

  • Data 보호 - 접근 제어 지시자

- public  : 어디서든 호출 가능

- Protected : 동일한 패키지 안, 또는 서브 클래스에서 호출 가능

- 생략 : 동일한 패키지 안에서만 호출 가능

- private : 동일한 클래스 안에서만 호출 가능

private로 선언된 인스턴스 필드는 Getter / Setter 로 접근해야 한다.

Getter - 필드 명은 인스턴스 필드의 이름을 의미 , 데이터형명은 인스턴스 필드의 데이터 형을 의미, return은 호출자에게 값을 반환하는 것을 의미

Setter - 필드 명은 인스턴스 필드의 이름을 의미 , 데이터형명은 인스턴스 필드의 데이터 형을 의미, 변수명은 파라미터로 받을 인자의 이름을 의미, void는 아무것도 반환하지 않는 다는 것을 의미

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Customer {
    /**
     * 구매자가 가지고 있는 금액
     */
    private int money;
 
        public void setMoney ( int money ) { // 주고싶은 데이터, 5번라인의 money와 관련이 없는 변수다.
        this.money = money; //인스턴스필드의 money에 파라미터로 넘어온 money를 넣는다.
    }
    
    //인스턴스필드가 가지고 있는 값을 외부로 가져다 준다. get
    public int getMoney () {
        return this.money; // 인스턴스 필드의 money를 return한다.
    }
    
cs

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함