course 2021/JAVA

day08 - class

코딩하는토끼 2021. 8. 29. 15:31

> class

클래스는 객체를 만들기 위한 틀

클래스 안에는 멤버변수메소드가 존재한다

-클래스의 변수는 객체의 속성이다

-클래스의 메소드는 객체의 기능이다

 

*(선언 위치에 따른) 변수의 종류

1) 멤버변수 member variable (클래스변수/인스턴스변수) - 클래스 내부에서 생성되고 사용됨 - 생성 시 기본값으로 자동 초기화됨

2) 지역변수 local variable - 메소드, 생성자 내부(블록{ })에서 생성되고 사용됨 - 메소드 종료와 동시에 소멸됨 - 초기화 필수

public class Variable {
    int a;
    void varNum(int c) {
        int b = 1;
    }
    
//a: 멤버변수
//b: 지역변수
//c: 매개변수
public calss ObjectBasic {
    public static void main(String[] args) {
        System.out.println(add(5)); //5  //메소드 add1
        System.out.println(add(10)); //15
        System.out.println(add(3)); //18
        
        System.out.println(add2(10)); //10  //첫번째 계산기로 새로운 계산을 할 수 없음, 두번째 계산기 필요(메소드 add2)
        System.out.println(add2(20)); //30
    }
    
    //첫번째 계산기
    static int result = 0;  //main밖에서 (class안에서) 변수 생성 - 멤버변수 / static
    static int add(int a) {  //메소드 add
        result += a;
        return result;
    }
    
    //두번째 계산기
    static int result2 = 0;
    static int add2(int a) {  //메소드 add2
        result2 += a;
        return result2;
    }
}

 

main 메소드가 있는 클래스에서 main 메소드가 없는 다른 클래스를 불러와 사용한다

각각의 클래스는 개별적으로 생성한다

객체생성명령: 클래스명 변수명 = new 클래스명();

클래스의 메소드 사용 시: 클래스변수명.메소드명(매개변수 값)

//main 메소드가 없는 클래스
public class Calculator {  //클래스 이름 Calculator
    int result = 0;
    int add(int a) {  //메소드 add
        result += a;
        return result;
    }
}

//main 메소드가 있는 클래스
public class ObjectBasic {
    public static void main(String[] args) {  //main
        System.out.println("첫 번째 계산");
        Calculator cal1 = new Calculator();  //객체생성명령 - 처음으로 불러옴 cal1
        System.out.println(cal1.add(5)); //5  //변수명.메소드명(매개변수 값)
        System.out.println(cal1.add(10)); //15
        System.out.println(cal1.add(3)); //18
        
        System.out.println("두 번째 계산기");
        Calculator cal2 = new Calculator();  //객체생성명령 - 두 번째로 불러옴 cal2
        System.out.println(cal2.add(10)); //10
        System.out.println(cal2.add(20)); //30
    }
}

클래스의 변수에 값 저장 시: 클래스변수명.변수명 = 값;

//main 메소드가 없는 클래스
public class Pen {  //클래스 Pen
    String ink;  //멤버변수
    int price;
    String company;
    
    void write() {  //메소드 write
        System.out.println(ink + "색 글씨를 씁니다");
    }
    
    void info() {  //메소드 info
        System.out.println("색상: " + ink);
        System.out.println("가격: " + price);
        System.out.println("제조사: " + company);
    }
}

//main 메소드가 있는 클래스 
public class Penmain {  //클래스 Penmain
    public static void main(String[] args) {  //main
        Pen black = new Pen();  //객체생성 black
        black.ink = "검정";
        black.price = 2000;
        black.company = "모나미";  //클래스 Pen의 변수에 값 저장
        black.write();  //클래스 Pen의 메소드 write 사용
        
        Pen red = new Pen();  //객체생성 red
        red.ink = "빨강";
        red.price = 3000;
        red.company = "하이테크";  //클래스 Pen의 변수에 값 저장
        red.write();  //클래스 Pen의 메소드 write 사용
        
        black.info();  //메소드 info사용
        red.info();
    }
}

 

> 생성자 constructor

객체 생성에서 new 키워드 다음에 오는 것

주된 역할 : 객체의 상태(멤버변수) 초기화

생성자는 클래스 이름과 완전히 동일, 반환유형 없음

클래스에 최소한 하나 이상 (만들지 않은 경우 자동으로 만들어져 있음)

여러개 생성 가능 (생성자 오버로딩) - 단, 매개변수의 종류/개수를 다르게 설정해야 함

일반적으로 생성자는 2개 (기본 생성자, 모든 멤버변수를 초기화 해주는 생성자) 를 가장 많이 사용함

객체생성 → 생성자 블록 실행

객체생성 시 매개변수 값 입력 (ex. Phone galaxy = new Phone("갤럭시");)

//Phone 클래스
public class Phone {
    String model;
    int price;
    String color;
    
    Phone() {  //생성자 이름 Phone = 클래스 이름 Phone
        System.out.println("생성자 호출");
        model = "샤오미";
        price = 20000;
        color = "green";
    }
    
    Phone(String pModel) {  //매개변수를 포함한 생성자
        model = pModel;
        price = 30000;
        color = "red";
    }
    
    Phone(String pModel, int pPrice, String pColor) {  //매개변수가 3개인 생성자
        model = pModel;
        price = pPrice;
        color = pColor;
    }
    
    void info() {  //클래스 Phone 안에있는 메소드 info
        System.out.println("모델: " + model);
        System.out.println("가격: " + price);
        System.out.println("색상: " + color);
    }
}
//PhoneMain 클래스
public class PhoneMain {
    public static void main(String[] args) {
       
        Phone shaomi = new Phone();  //객체생성 -> 생성자실행
        shaomi.info();  //Phone 클래스의 info 메소드
        
        Phone galaxy = new Phone("갤럭시");  //객체생성 시 매개변수 값 입력
        galaxy.info();
        
        Phone iPhone = new Phone("아이폰", 100000, "white");
        iPhone.info();
    }
}    

//생성자 호출 //객체생성에 의한 출력
//모델: 샤오미 //이후 info 메소드에 의한 출력
//가격: 20000
//색상: green
//모델: 갤럭시
//가격: 30000
//색상: black
//모델: 아이폰
//가격: 100000
//색상: white

 

*클래스 종류

1) 사용자 정의 클래스 (사용자가 직접 만든)

2) 이미 만들어져 있는 클래스 (JDK에 포함된  / 다른 개발자가 만들어 놓은)