_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 |