728x90
클래스
package chap_07;
// # 설계도 (블랙박스 설계도) / 블랙박스 설계도에서 4가지 데이터(인스턴스변수)가 있는 것
// 이 클래스에서는 메인 메소드가 필요없음
// 그냥 변수 정의해주기
// 정의한 변수를 인스턴스 변수라고 함
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
// 인스턴스 변수 생성
}
package chap_07;
public class _01_class {
public static void main(String[] args) {
// 객체지형 프로그래밍
// 특징 : 유지보수 용이
// 높은 재사용성
// 문자열 한번에 관리하기 - 배열사용
// String[] items = {"CPU", "RAM", "하드디스크"};
// 차량용 블랙박스
// 모델명, 해상도, 가격, 섹싱
// 우리가 만든 첫 번째 작품
String modelName = "까망이";
String resolution = "FHD";
int price = 200000;
String color = "블랙";
// 새로운 제품을 개발
String modelName2 = "하양이";
String resolution2 = "UHD";
int price2 = 30000;
String color2 = "하양";
// 매번 비슷한 변수를 정의하는 건 효율적이지 못함 = class 사용해준다
// class: 서로 다른 자료형이지만 서로 비슷한 것들끼리 모아둔 하나의 형태
// 또 다른 제품을 개발?
// 블랙박스 클래스로부터 객체 만들기 (클래스로부터 만들어지는게 객체이다)
// 클래스 이름 적고, 객체의 이름을 적어준다
BlackBox bbox = new BlackBox();
// BlackBox 라는 클래스로부터 bbox라는 객체 만들기(생성) 성공
// bbox 객체는 BalckBox 클래스의 인스턴스라고 표현
// 여러개 만들기 가능
// 클래스 = 설계도. 객체 = 제품
// 똑같은 클래스 BlackBox를 갖고 bbox2 라는 서로 다른 객체(제품)을 만들기 가능
BlackBox bbox2 = new BlackBox();
}
}
인스턴스 변수
package chap_07;
public class _02_instanceVariables {
public static void main(String[] args) {
// 블랙박스 객체 만들어주기
// b1 이라는 객체 생성
BlackBox b1 = new BlackBox();
// 객체가 갖고있는 4가지 인스턴스 변수에 접근해서 값을 설정해줄 수 있음.
b1.modelName = "까망이";
b1.resolution = "FHD";
b1.price = 200000;
b1.color = "블랙";
System.out.println(b1.modelName);
System.out.println(b1.resolution);
System.out.println(b1.price);
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(b2.modelName);
System.out.println(b2.resolution);
System.out.println(b2.price);
System.out.println(b2.color);
// 설계도 따라서 만든 b1, b2 객체가 서로 다른 값들을 자기들끼리 갖고있는 것.
}
}
클래스 변수
// # 설계도 (블랙박스 설계도) / 블랙박스 설계도에서 4가지 데이터(인스턴스변수)가 있는 것
// 이 클래스에서는 메인 메소드가 필요없음
// 그냥 변수 정의해주기
// 정의한 변수를 인스턴스 변수라고 함
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
// 인스턴스 변수 생성
// 변수생성하기
// flase라는 값으로 초기화한 것
static boolean canAutoReport = false; // 자동신고기능 (아직 개발되진 않음)
// 앞에 static을 붙이게 되면 이걸 "class 변수" 라고 한다.
// 클래스 내의 클래스 변수라서. static 없이 붙은 건 "인스턴스 변수"
// 인스턴스 변수 : 서로 다른 객체에서 서로 다른 값들을 가짐.
// 클래스 변수 : 클래스로부터 만들어지는 모든 객체에 똑같이 공통적으로 적용된다.
}
1. 왜 boolean 을 사용한 거고, false를 정의한 건지
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
// 객체.변수명 보다는 클래스명.변수명 => 이런식으로 접근하는걸 더 권장. (BlackBox.canAutoReport);
System.out.println("모든 블랙박스 제품 자동 신고기능 : " + BlackBox.canAutoReport);
//까망이자동신고기능 : false / 하양이자동신고기능 : false / 모든 블랙박스 제품 자동 신고기능 : false
// 기능 개발하기
BlackBox.canAutoReport = true; //false를 true로 바꿔주기
// true로 바꿨으니 이 클래스를 가진 모든 객체들 또한 true로 바뀌게 됨
System.out.println("- 개발 후 - ");
System.out.println(b1.modelName + "자동신고기능 : " + b1.canAutoReport);
System.out.println(b2.modelName + "자동신고기능 : " + b2.canAutoReport);
System.out.println("모든 블랙박스 제품 자동 신고기능 : " + BlackBox.canAutoReport);
} //까망이자동신고기능 : true / 하양이자동신고기능 : true / 모든 블랙박스 제품 자동 신고기능 : true
}
메소드
package chap_07;
// # 설계도 (블랙박스 설계도) / 블랙박스 설계도에서 4가지 데이터(인스턴스변수)가 있는 것
// 이 클래스에서는 메인 메소드가 필요없음
// 그냥 변수 정의해주기
// 정의한 변수를 인스턴스 변수라고 함
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
// 인스턴스 변수 생성
// 변수생성하기
// flase라는 값으로 초기화한 것
static boolean canAutoReport = false; // 자동신고기능 (아직 개발되진 않음)
// 앞에 static을 붙이게 되면 이걸 "class 변수" 라고 한다.
// 클래스 내의 클래스 변수라서. static 없이 붙은 건 "인스턴스 변수"
// 인스턴스 변수 : 서로 다른 객체에서 서로 다른 값들을 가짐.
// 클래스 변수 : 클래스로부터 만들어지는 모든 객체에 똑같이 공통적으로 적용된다.
// 1) 자동으로 신고하는 기능을 메소드로 만들어보자!
void autoReport() {
if (canAutoReport) {
System.out.println("충돌이 감지되어 자동으로 신고합니다.");
} else {
System.out.println("자동 신고 기능이 지원되지 않습니다.");
} // 2) b1객체에서 이걸 사용해보자 (04_Method로 이동)
}
// 1. 메모리카드 기능을 메소드로 만들어보자!
void insertMemryCard(int capacity) {
System.out.println("메모리 카드가 삽입되었습니다.");
System.out.println("용량은 " + capacity + "GB 입니다.");
}
// 1] 일반영상
// 이벤트 영상 (충돌 감지한 영상)
// 이렇게 두 영상이 분리되어있는데 영상의 총 개수 구하기
// 일반영상은 타입을 1, 이벤트 영상은 타입을 2로 해서 받아온다.
int getVideoMemoryCard(int type) {
if (type == 1) { // 일반영상
return 9; // 반환되는 값 임시로 적음
} else if (type == 2) {
return 1;
}
return 10; // 타입 알 수 없으면 전체 영상개수인 10을 반환
}
}
1. return 꼭 써야하는지, 왜 쓴 건지
package chap_07;
public class _04_Method {
public static void main(String[] args) {
// 1. 객체를 생성해준다
BlackBox b1 = new BlackBox();
b1.modelName = "까망이";
// 3) b1.을 통해서 접근해준다.
b1.autoReport(); // 자동 신고 기능이 지원되지 않습니다.
// 자동 신고 기능이 개발됨
BlackBox.canAutoReport = true;
b1.autoReport(); // 충돌이 감지되어 자동으로 신고합니다.
// 2. 아까만든 메모리카드 메소드 호출
b1.insertMemryCard(256);
//메모리 카드가 삽입되었습니다.
//용량은 256GB 입니다.
// 2] 일반영상과 이벤트 영상
int fileCount = b1.getVideoMemoryCard(1); //일반 영상 갖고오게 됨
// 앞에 어떤 변수를 정해줘야 한다
// b1객체의getVideoMemoryCard를 통해 반횐되는 값을 fileCount에 전달받게됨
System.out.println("일반 영상 파일 수 :" + fileCount + "개"); //일반 영상 파일 수 :9개
fileCount = b1.getVideoMemoryCard(2); // 이벤트 영상
System.out.println("일반 영상 파일 수 :" + fileCount + "개"); //일반 영상 파일 수 :1개
}
}
메소드 오버로딩
package chap_07;
// # 설계도 (블랙박스 설계도) / 블랙박스 설계도에서 4가지 데이터(인스턴스변수)가 있는 것
// 이 클래스에서는 메인 메소드가 필요없음
// 그냥 변수 정의해주기
// 정의한 변수를 인스턴스 변수라고 함
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
// 인스턴스 변수 생성
// 변수생성하기
// flase라는 값으로 초기화한 것
static boolean canAutoReport = false; // 자동신고기능 (아직 개발되진 않음)
// 앞에 static을 붙이게 되면 이걸 "class 변수" 라고 한다.
// 클래스 내의 클래스 변수라서. static 없이 붙은 건 "인스턴스 변수"
// 인스턴스 변수 : 서로 다른 객체에서 서로 다른 값들을 가짐.
// 클래스 변수 : 클래스로부터 만들어지는 모든 객체에 똑같이 공통적으로 적용된다.
// 1) 자동으로 신고하는 기능을 메소드로 만들어보자!
void autoReport() {
if (canAutoReport) {
System.out.println("충돌이 감지되어 자동으로 신고합니다.");
} else {
System.out.println("자동 신고 기능이 지원되지 않습니다.");
} // 2) b1객체에서 이걸 사용해보자 (04_Method로 이동)
}
// 1. 메모리카드 기능을 메소드로 만들어보자!
void insertMemryCard(int capacity) {
System.out.println("메모리 카드가 삽입되었습니다.");
System.out.println("용량은 " + capacity + "GB 입니다.");
}
// 1] 일반영상
// 이벤트 영상 (충돌 감지한 영상)
// 이렇게 두 영상이 분리되어있는데 영상의 총 개수 구하기
// 일반영상은 타입을 1, 이벤트 영상은 타입을 2로 해서 받아온다.
int getVideoMemoryCard(int type) {
if (type == 1) { // 일반영상
return 9; // 반환되는 값 임시로 적음
} else if (type == 2) {
return 1;
}
return 10; // 타입 알 수 없으면 전체 영상개수인 10을 반환
}
// 녹화하는 메소드 만들기 (레코드 메소드)
//showDateTime: 날짜 정보 표시여부
//showSpeed : 속도 정보 표시여부
//min : 영상 기록 단위(분)
void record(boolean showDateTime, boolean showSpeed, int min) {
// 날짜 시간 정보를 넣을지 말지 결정 / 운행하고 있을 때 속도 정보 / 블랙박스 영상을 몇 분 단위로 끊어서 저장할 지
System.out.println("녹화를 시작합니다.");
if (showDateTime) {
System.out.println("영상에 날짜 정보가 표시됩니다.");
}
if (showSpeed) {
System.out.println("영상에 속도 정보가 표시됩니다");
}
System.out.println("영상은" + min + "분 단위로 기록됩니다.");
}
// 더 효율적인 레코드 메소드 만들기 (파라미터 타입이 다르거나, 개수가 다르면 오버로딩 가능)
void record() {
record(true, true, 5); // 메소드를 오버로딩으로 가서 호출해보자
}
}
package chap_07;
public class _05_MethodOverloading {
public static void main(String[] args) {
BlackBox b1 = new BlackBox();
b1.modelName = "까망이";
// 녹화하는 메소드 BlackBox 클래스에서 만들기
// 만든 레코드 메소드 호출하기.
b1.record(false, false, 10);
// 표시하고 싶지 않은게 있으면 false를 써줌
// 날짜 정보나 속도 정보는 원하지 않고 순수 시간만 보고싶은 것
/* 출력결과:
녹화를 시작합니다. 영상은10분 단위로 기록됩니다.*/
// true: 포함 / false: 미포함
System.out.println("----------------------------");
b1.record(true, false, 3);
/* 출력결과:
* 녹화를 시작합니다.
* 영상에 날짜 정보가 표시됩니다.
* 영상은3분 단위로 기록됩니다.
*/
System.out.println("----------------------------");
b1.record(true, true, 3);
/* 출력결과:
* 녹화를 시작합니다.
* 영상에 날짜 정보가 표시됩니다.
* 영상에 속도 정보가 표시됩니다
* 영상은3분 단위로 기록됩니다.
*/
System.out.println("----------------------------");
b1.record();
/*
* 녹화를 시작합니다.
* 영상에 날짜 정보가 표시됩니다.
* 영상에 속도 정보가 표시됩니다
* 영상은5분 단위로 기록됩니다.
*/
}
}
클래스 메소드
package chap_07;
// # 설계도 (블랙박스 설계도) / 블랙박스 설계도에서 4가지 데이터(인스턴스변수)가 있는 것
// 이 클래스에서는 메인 메소드가 필요없음
// 그냥 변수 정의해주기
// 정의한 변수를 인스턴스 변수라고 함
public class BlackBox {
String modelName; // 모델명
String resolution; // 해상도
int price; // 가격
String color; // 색상
// 인스턴스 변수 생성
// 변수생성하기
// flase라는 값으로 초기화한 것
static boolean canAutoReport = false; // 자동신고기능 (아직 개발되진 않음)
// 앞에 static을 붙이게 되면 이걸 "class 변수" 라고 한다.
// 클래스 내의 클래스 변수라서. static 없이 붙은 건 "인스턴스 변수"
// 인스턴스 변수 : 서로 다른 객체에서 서로 다른 값들을 가짐.
// 클래스 변수 : 클래스로부터 만들어지는 모든 객체에 똑같이 공통적으로 적용된다.
// 1) 자동으로 신고하는 기능을 메소드로 만들어보자!
void autoReport() {
if (canAutoReport) {
System.out.println("충돌이 감지되어 자동으로 신고합니다.");
} else {
System.out.println("자동 신고 기능이 지원되지 않습니다.");
} // 2) b1객체에서 이걸 사용해보자 (04_Method로 이동)
}
// 1. 메모리카드 기능을 메소드로 만들어보자!
void insertMemryCard(int capacity) {
System.out.println("메모리 카드가 삽입되었습니다.");
System.out.println("용량은 " + capacity + "GB 입니다.");
}
// 1] 일반영상
// 이벤트 영상 (충돌 감지한 영상)
// 이렇게 두 영상이 분리되어있는데 영상의 총 개수 구하기
// 일반영상은 타입을 1, 이벤트 영상은 타입을 2로 해서 받아온다.
int getVideoMemoryCard(int type) {
if (type == 1) { // 일반영상
return 9; // 반환되는 값 임시로 적음
} else if (type == 2) {
return 1;
}
return 10; // 타입 알 수 없으면 전체 영상개수인 10을 반환
}
// 녹화하는 메소드 만들기 (레코드 메소드)
//showDateTime: 날짜 정보 표시여부
//showSpeed : 속도 정보 표시여부
//min : 영상 기록 단위(분)
void record(boolean showDateTime, boolean showSpeed, int min) {
// 날짜 시간 정보를 넣을지 말지 결정 / 운행하고 있을 때 속도 정보 / 블랙박스 영상을 몇 분 단위로 끊어서 저장할 지
System.out.println("녹화를 시작합니다.");
if (showDateTime) {
System.out.println("영상에 날짜 정보가 표시됩니다.");
}
if (showSpeed) {
System.out.println("영상에 속도 정보가 표시됩니다");
}
System.out.println("영상은" + min + "분 단위로 기록됩니다.");
}
// 더 효율적인 레코드 메소드 만들기 (파라미터 타입이 다르거나, 개수가 다르면 오버로딩 가능)
void record() {
record(true, true, 5); // 메소드를 오버로딩으로 가서 호출해보자
}
// 블랙박스에 문제가 생겨서 고객센터에 전화하는 메소드(기능) 생성
// 클래스 메소드 만들어주기
// 일반 메소드하고 다른점: static이 붙어있다. 객체마다 서로 다른 동작을 하는 일반 메소드와 달리, 동작이 항상 똑같다.(모든객체에 공통적용)
static void callServiceCenter() {
System.out.println("서비스 센터로 연결합니다.");
// 인스턴스 변수 modelName을 여기서 바꿔보자..!
// modelName = "test"; // 오류가 뜸
// 위의 클래스 변수 canAutoReport 를 바꿔보자..!
canAutoReport = false; // 오류가 안 뜸
// 무슨 차이일까? : static으로 선언한 클래스 변수는 static메소드에서 바로 사용 가능
// 객체가 만들어져야 만들어지는 인스턴스변수는 static 클래스 메소드 내에서는 직접 접근이 불가능
}
}
package chap_07;
public class _06_ClassMethod {
public static void main(String[] args) {
// 블랙박스 객체 생성해주기
BlackBox b1 = new BlackBox();
b1.callServiceCenter(); //서비스 센터로 연결합니다.
BlackBox b2 = new BlackBox();
b2.callServiceCenter(); //서비스 센터로 연결합니다.
// 위의 문장들을 주석처리하고,
// 객체를 선언하지않고, 클래스의 클래스 메소드에 직접 접근하기
BlackBox.callServiceCenter(); //서비스 센터로 연결합니다.
}
}
728x90
'> 프로그래밍 언어 > JAVA' 카테고리의 다른 글
[나도코딩] 자바기본편 - 섹션 8 (3) (0) | 2023.04.16 |
---|---|
[나도코딩] 자바기본편 - 섹션 8 (2) (0) | 2023.04.15 |
[나도코딩] 자바기본편 - 섹션 7 (0) | 2023.04.12 |
[나도코딩] 자바기본편 - 섹션 1, 2 (0) | 2023.04.06 |
[그림으로 배우는 자바, part2]: 03 레퍼런스와 스태틱 (0) | 2023.02.27 |