2023/JAVA_나도코딩 강의 공부

클래스

luha oh 2023. 2. 25. 14:12

_01_Class

package chap_07;

public class _01_Class {
    public static void main(String[] args) {
        // 객체 지향 프로그래밍
        // 객체들끼리 서로 어우러진 형태로 프로그램 구성
        // 유지보수 용이
        // 높은 재사용성

        // 차량용 블랙박스
        // 모델명, 해상도, 가격, 색상

        // 우리가 만든 첫 번째 제품
        String modelName="까망이";
        String resolution="FHD";
        int price=200000;
        String color="블랙";

        // 새로운 제품을 개발(두 번째 제품)
        String modelName2="하양이";
        String resolution2="UHD";
        int price2=300000;
        String color2="화이트";

        // 또다른 제품을 개발?
        // 세 번째 제품을 개발하면 총 선언된 변수 12개...
        // 개발 제품의 종류가 많아질수록 복잡, 비슷한 패턴의 반복...
        // 네 개의 서로 다른 데이터 정보를 한번에 관리하자!
        // 클래스 : 서로 다른 자료형이지만 비슷한 것들끼리 모아둔 하나의 형태
        // => BlackBox라는 하나의 클래스를 만들어 관리하자!

        // 또다른 제품을 개발?
        BlackBox bbox=new BlackBox();
        // BlackBox 클래스로부터 bbox 객체 생성
        // bbox 객체는 BlackBox 클래스의 인스턴스
        // 클래스 : 설명서, 설계도(종이접기 책)
        // 객체 : 그 설계도로부터 만들어진 결과물(종이접기 책을 보고 만든 종이학)
    }

}

// BlackBox 클래스로부터 bbox 객체 생성
// bbox 객체는 BlackBox 클래스의 인스턴스

 

 

 

 

_02_InstanceVariables ( 인스턴스 변수)

 

 

 

package chap_07;

public class BlackBox {
    String modelName; // 모델명
    String resolution; // 해상도
    int price; // 가격
    String color; // 색상
}
package chap_07;

public class _02_InstanceVariables {
    public static void main(String[] args) {
        BlackBox b1=new BlackBox();
        b1.modelName="까망이";
        b1.resolution="FHD";
        b1.price=200000;
        b1.color="블랙";

        System.out.println(b1.modelName); // 까망이
        System.out.println(b1.resolution); // FHD
        System.out.println(b1.price); // 200000
        System.out.println(b1.color); // 블랙

        System.out.println("---------------------------");

        // 새로운 블랙박스 제품
        BlackBox b2=new BlackBox();
        b2.modelName="하양이";
        b2.resolution="UHD";
        b2.price=300000;
        b2.color="화이트";

        System.out.println(b1.modelName); // 하양이
        System.out.println(b1.resolution); // UHD
        System.out.println(b1.price); // 3000000
        System.out.println(b1.color); // 화이트
    }

}

 

_03_ClassVariables ( 클래스 변수 )

 

 

- 인스턴스 변수 : 서로 다른 객체에서 서로 다른 값 가짐.

- 클래스 변수 : static 붙임. 해당 클래스로부터 만들어지는 모든 객체에 똑같이 적용됨.

 

package chap_07;

public class BlackBox {

    // 아래 네 가지는 인스턴스 변수
    // 서로 다른 객체에서 서로 다른 값 가짐

    String modelName; // 모델명
    String resolution; // 해상도
    int price; // 가격
    String color; // 색상

    static boolean canAutoReport=false; // 자동 신고 기능
    // BlackBox 클래스 내의 클래수 변수(static 붙임)
    // static을 붙이면 클래스 변수가 됨.
    // 이 클래스로부터 만들어지는 모든 객체에 똑같이 적용됨.
}

 

 

 

package chap_07;

// 블랙박스에 자동 신고 기능 탑재(일정 크기 이상의 충돌 발생 시)
// 제품의 소프트웨어 버전만 업데이트 시 기능 사용 가능
// 블랙박스 설계도를 통해 만들어진 모든 객체는 소프트웨어 업데이트만 되면
// 모두 자동 신고 기능 사용 가능
public class _03_ClassVariables {
    public static void main(String[] args) {
        BlackBox b1=new BlackBox();
        b1.modelName="까망이";
        System.out.println(b1.modelName); // 까망이

        BlackBox b2=new BlackBox();
        b2.modelName="하양이";
        System.out.println(b2.modelName); // 하양이

        // 특정 범위를 초과하는 충돌 감지 시 자동 신고 기능 개발 여부
        System.out.println(" - 개발 전 - ");
        System.out.println(b1.modelName+" 자동 신고 기능 : "+b1.canAutoReport);
        System.out.println(b2.modelName+" 자동 신고 기능 : "+b2.canAutoReport);

//        [실행 결과]
//        - 개발 전 -
//        까망이 자동 신고 기능 : false
//        하양이 자동 신고 기능 : false

//        ** 블랙박스 클래스에서 클래스 변수 static boolean canAutoReport=true; 로 수정하면
//        실행결과 : 까망이, 하양이 모두 한꺼번에 자동 신고 기능 : true 라고 출력됨.       
//        클래스 변수는 해당 클래스로부터 만들어진 객체에 모두 동일하게 적용되므로
//        클래스 변수 canAutoReport의 값 하나만 바꿔도 까망이, 하양이 모두에게 일괄적으로 적용됨.

	System.out.println("모든 블랙박스 제품 자동 신고 기능 : "+BlackBox.canAutoReport);
        // 클래스명.클래스변수명
        // 해당 클래스로부터 생성된 모든 객체에 적용되므로 클래스명.클래스변수명으로 표현하는 것이 더 권장된다.
	
    // 기능 개발
        BlackBox.canAutoReport=true;
        System.out.println(" - 개발 후 - ");
        System.out.println(b1.modelName+" 자동 신고 기능 : "+b1.canAutoReport); // true
        System.out.println(b2.modelName+" 자동 신고 기능 : "+b2.canAutoReport); // true
        System.out.println("모든 블랙박스 제품 자동 신고 기능 : "+BlackBox.canAutoReport); // true
    
    }
}
  • static boolean canAutoReport = false;  // 클래스변수
  • BlackBox.canAutoReport 와 같이 클래스명.클래스변수 형태로도 사용가능하다.
  • 객체명.클래스변수 꼴로도 사용할 수 있지만(예를 들면 여기서는 b1.canAutoReport 형태) 클래스명.클래스변수 형태를 더 권장.

 

 

 

 

 

 

출처 : 나도코딩의 자바 기본편

'2023 > JAVA_나도코딩 강의 공부' 카테고리의 다른 글

상속  (0) 2023.02.28
패키지  (0) 2023.02.28
생성자  (1) 2023.02.27
this  (0) 2023.02.27
메소드 오버로딩 / 클래스 메소드  (0) 2023.02.25