IT Study/Java
Java - 인스턴스/클래스 변수
hhyyyjun
2022. 12. 28. 13:30
| 생성자 오버로딩, this 연습
각 주석 확인하기
1. Practice
package class01;
class Car{
String name; //멤버변수(=속성, 필드, attribute...)
int speed;
int maxSpeed;
void speedUp() { //멤버함수(=메서드)
//1. 기본형 2. 기능구현 3. input,output 올바른지 체크
this.speed+=10;
if(this.speed>this.maxSpeed) {
this.speed=this.maxSpeed;
System.out.println("과속!");
}
}
void speedUp(int speed) { //오버로딩
//기본형 -> 기능구현 -> input, output 올바른지 체크
this.speed+=speed;
if(this.speed>this.maxSpeed) {
this.speed=this.maxSpeed;
System.out.println("과속!");
}
}
void showInfo() {
System.out.println(name+"님의 현재 차량 속도 : ["+this.speed+"/"+this.maxSpeed+"]");
}
Car(String name){
// 1. 인자가 가장 많은 생성자만 놔두고,
// 2. 다른 생성자에서 1번의 생성자를 재사용
this(name,0,120);
// this.name = name;
// this.speed=0;
// this.maxSpeed=120;
}
Car(String name, int speed, int maxSpeed){//생성자 오버로딩
this.name = name;
this.speed = speed;
this.maxSpeed=maxSpeed;
}
}
public class Test01_review {
public static void main(String[] args) {
Car car1 = new Car("홍길동",0,200);//기본생성자(디폴트생성자) ->생성자가 하나도 없을 때 제공
//멤버변수가 내가 원하는 값대로 초기화되지 않음
// ->생성자를 사용하는 이유 : 멤버변수를 원하는 값으로 초기화 가능 + 강제
Car car2 = new Car("아리");
car1.speedUp(130);
car2.speedUp(130);
car1.showInfo();
car2.showInfo();
}
}

2. Practice

3. Practice

| 인스턴스 변수/클래스 변수
1. 인스턴스(객체) 변수
객체마다 갖는 고유한 변수
1) 클래스 내 생성할 때 만들어지며, 각각 자신의 고유한 값을 가지고 있음
2) 각 인스턴스마다 다른 값을 가져야할 때 생성
2. 클래스 변수
모든 객체가 동일한 값을 갖는 변수
1) 모든 인스턴스가 같은 저장공간을 공유
1. Practice
num2 가 클래스 변수로써 값을 공유하므로 25번 줄에서 값을 변경한 경우 다른 객체에서도 호출했을 때 값이 공유된다.

2. Practice

3. Practice
package class01;
class Card{
String name; //멤버 변수
static int remaincash; //클래스 변수
int limit;
void use() {
this.use(10000);
}
void use(int usedcash) {
System.out.print(usedcash+"원 사용");
if(this.limit<usedcash) {
System.out.print(" 한도초과!");
}
else if(remaincash-usedcash<0) {
System.out.print(" 잔액부족!");
}
else {
remaincash-=usedcash;
}
System.out.println(" 남은 금액 "+remaincash+"원");
}
//모듈화 : 동일한 기능을 하나의 함수로 묶는 것
void showInfo() {
System.out.println(this.name+"님 [남은금액 : "+this.remaincash+"원]");
}
Card(String name){
this(name, 200000);
}
Card(String name, int limit){
this.name = name;
this.limit = limit;
}
}
public class Test07_exam {
public static void main(String[] args) {
//홍길동 최초 20만원 보유
Card card1 = new Card("홍길동");
Card card2 = new Card("홍길동", 20000);//한도
card1.remaincash=200000; //Card. 로 쓰는 것이 더 좋음
card1.use(); //카드를 한 번 쓰면 10000원 사용한다면> 190000원
card1.use(100000);//100000원 사용 : 남은 금액 90000원
card2.use(50000); //50000원 사용 : 한도초과! 남은 금액 90000원
card2.use(); //10000원 사용 : 남은 금액 80000원
card1.use(90000); //90000원 사용 : 잔액부족! 남은 금액 80000원
card1.showInfo(); //홍길동님[남은 금액 : 80000원]
card2.showInfo();
}
}
| 객체 배열
같은 클래스로 만들어진 여러 변수들의 나열된 집합. 같은 구조를 갖고 있으나 다른 객체 값을 저장
객체를 만들어도 각 인덱스 값을 선언해줘야 사용할 수 있다.
1. Practice

2. Practice - 학생부 프로그램
package class02;
import java.util.Scanner;
class Student{
String name; //멤버 변수
int score;
void showInfo() { //멤버 함수
System.out.println(name+"학생은 "+score+"점 입니다.");
}
Student(String name, int score){ //매개변수 생성자
this.name = name;
this.score = score;
System.out.println(this.name+"학생 입력 완료!");
}
}
//학생부 프로그램 CRUD 로직
public class Test09 {
public static void main(String[] args) {
Student[] data = new Student[3];
int index = 0; //data에 몇개까지 들어있는지 알려줄 변수
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("1. 추가");
System.out.println("2. 출력");
System.out.println("3. 변경");
System.out.println("4. 종료");
System.out.print("입력 : ");
int act = sc.nextInt();
//유효성 검사 > 사용자가 입력하는 경우라면 무조건
if(act==1) {
if(index == data.length) {// index가 배열 길이와 같다면
System.out.println("데이터 공간이 부족!");
continue;//while문 최상단으로 이동
}
System.out.print("이름 입력 : ");
String name = sc.next();
//성적에 대한 유효성 검사
System.out.print("성적 입력 : ");
int score = sc.nextInt();
data[index] = new Student(name, score); //객체 생성
index++;
}
else if(act==2) {
if(index == 0) {
System.out.println("저장된 정보가 없습니다.");
continue;
}
else {
System.out.println("학생목록");
for(int i=0;i<index;i++) {
data[i].showInfo();
}
}
}
else if(act==3) {
System.out.print("정보를 변경할 학생의 번호 입력 : ");
int num = sc.nextInt();
num--;
if(num <0 || num >=index) {
System.out.println("없는 번호 입니다 확인 후 다시 이용 해주세요");
continue;
}
System.out.print("변경할 점수 입력 : ");
data[num].score=0;
System.out.println(data[num].name+"학생 정보 변경 완료!");
}
else if(act==4) {
System.out.println("종료"); //정말 종료하시겠습니까?
break;
}
else {
System.out.println("잘못된 입력입니다.");
}
}
}
}
