Java 개념정리 10일차

2026. 1. 12. 17:01대우개발원 수업 내용/Java 정리

반응형

[클래스 맴버]

    클래스에 선언된 필드와 메소드가 모두 객체 내부에 포함되는 것은 아니다.  
    객체가 있어야 사용 가능한 멤버가 있고, 그렇지 않는 멤버도 있다.
 

인스턴스 멤버
- 객체 마다 가지고 있는 멤버
- 인스턴스 필드: 힙 영역의 객체 마다 가지고 있는 멤버, 객체마다 다른 데이터를 저장
- 인스턴스 메소드: 객체가 있어야 호출 가능한 메소드,
   클래스 코드(메소드 영역)에 위치하지만, 이해하기 쉽도록 객체 마다 가지고 있는
   메소드라고 생각해도 됨
 

정적 멤버
- 객체와 상관없는 멤버, 클래스 코드(메소드 영역)에 위치
   정적 필드 및 상수: 객체 없이 클래스만으로도 사용 가능한 필드
   정적 메소드: 객체가 없이 클래스만으로도 호출 가능한 메소드

 

[인스턴스 멤버와 this]

- 인스턴스 (instance) 멤버  
  객체를 생성한 후 사용할 수 있는 필드와 메소드
  객체에 소속된 멤버

public class Car {
	//필드
	int gas;

	//메소드
	void setSpeed(int speed) { · }
}
Car myCar = new Car();
myCar.gas = 10;
myCar.setSpeed(60);

Car yourCar = new Car();
yourCar.gas = 20;
yourCar.setSpeed(80);

 

 this
- 객체 내부에서는 인스턴스 멤버에 접근하기 위해 this를 사용. 객체는 자신을 ‘this’라고 지칭
- 생성자와 메소드의 매개변수명이 인스턴스 멤버인 필드명과 동일한 경우,

   인스턴스 필드 임을 강조하고자 할 때 this를 주로 사용

Car(String model) {
	this.model = model;

}
void setModel(String model) {
	this.model = model;

}

예시 Car, CarEx 코드

더보기
더보기
package sec01;

public class Car {
	// 필드
	String model;
	int speed;
	
	// 생성자
	Car(String model) {
		this.model = model;
		//this.model의 model은 필드의 String model
	}
	
	// 메서드
	void setSpeed(int speed) {
		this.speed = speed; // 여기에 있는
		//this.speed의 speed는 필드의 int speed
	}
	
	void run() {
		for(int i=0; i<=50; i++) {
			this.setSpeed(i); //여기에 있는 setSpeed는 메서드의 setSpeed (여기는 this생략가능)
			System.out.println(this.model + "가 달립니다. (시속:" + this.speed + "km/h)");
			//this.model의 model은 필드의 String model (여기는 this생략가능)
			//this.speed의 speed는 필드의 int speed (여기는 this생략가능)
		}
	}
}
package sec01;

public class CarEx {

	public static void main(String[] args) {
		Car myCar = new Car("포르쉐");
		Car yourCar = new Car("벤츠");
		
		myCar.run();
		yourCar.run();

	}

}

[정적 멤버 선언]
- 정적 멤버: 메소드 영역의 클래스에 고정적으로 위치하는 멤버
-  static 키워드를 추가해 정적 필드와 정적 메소드로 선언

public class 클래스 {
	//정적 필드 선언
	static 타입 필드 [= 초기값];

	//정적 메소드
	static 리턴타입 메소드( 매개변수, … ) { … }

}

 

[정적 멤버와 static]

 정적 멤버 사용
- 클래스 이름과 함꼐 도트 연산자로 접근

클래스, 필드;
클래스. 메소드( 매개값, … );
public class Calculator {
	static double pi = 3.14159;
	static int plus(int x, int y) { ... }
	static int minus(int x, int y) { ... }
}
double result1 = 10 * 10 * Calculator.pi;
int result2 = Calculator.plus(10, 5);
int result3 = Calculator.minus(10, 5);

 

위의 내용을 정리한 Calculator, CalculatorEx

더보기
더보기
package sec01;

public class Calculator {
	static double pi = 3.14159;
	static int plus(int x, int y) {
		return x + y;
	}
	static int minus(int x, int y) {
		return x - y;
	}
}
package sec01;

public class CalculatorEx {

	public static void main(String[] args) {
		double result1 = 10 * 10 * Calculator.pi;
		int result2 = Calculator.plus(10, 5);
		int result3 = Calculator.minus(10, 5);
		
		System.out.println("result1 : " + result1);
		System.out.println("result2 : " + result2);
		System.out.println("result3 : " + result3);
	}

}

[정적 멤버와 static]

- 인스턴스 멤버와 정적 멤버 선택 기준
  객체마다 다를 수 있는 필드값 -> 인스턴스 필드로 선언
  그렇지 않고 객체마다 다를 필요가 없는 필드값 -> 정적 필드로 선언

public class Calculator {
	String color;			//계산기별로 색깔이 다를 수 있습니다.
	static double pi = 3.14159; //계산기에서 사용하는 파이(π) 값은 동일합니다.

}


- 메소드 블록에 인스턴스 필드 또는 인스턴스 메소드를 사용할 경우 -> 인스턴스 메소드로 선언
  그렇지 않을 경우 -> 정적 메소드로 선언

public class Calculator {
	String color;						//인스턴스 필드
	void setColor(String color) { this.color = color; }	//인스턴스 메소드
	static int plus(int x, int y) { return x + y; }		//정적 메소드
	static int minus(int x, int y) { return x - y; }	//정적 메소드
}

 

 정적 메소드 선언 시 주의할 점
- 정적 메소드 선언 시 그 내부에 인스턴스 필드 및 메소드 사용 불가
- 정적 메소드 선언 시 그 객체 자신 참조인 this 키워드 사용 불가

public class ClassName {
	//인스턴스 필드와 메소드
	int field1;
	void method1() { }
	//정적 필드와 메소드
	static int field2;
	static void method2() { ... }

	//정적 메소드
	static void Method3 {
		this.field1 = 10; //(x)←컴파일 에리
        this.method1();	//(x)←컴파일 에리
		field2 = 10;	//(o)
		method2();		//(0)

	}
}

- 정적 메소드에서 인스턴스 멤버 사용하려는 경우
   객체 우선 생성 후 참조 변수로 접근

static void Method3() {
	ClassName obj = new ClassName();
	obj.field1 = 10;
	obj.method1();

}

[정적 멤버 사용]

클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있음
▪ 클래스 이름과 함께 도트(.) 연산자로 접근
▪ 정적 필드와 정적 메소드는 객체 참조 변수로도 접근

 

[정적 블록]

- 정적 필드를 선언할 때 복잡한 초기화 작업이 필요하다면 정적 블록을 이용
- 정적 블록은 클래스가 메모리로 로딩될 때 자동으로 실행
- 정적 블록이 클래스 내부에 여러 개가 선언되어 있을 경우에는 선언된 순서대로 실행
- 정적 필드는 객체 생성 없이도 사용할 수 있기 때문에 생성자에서 초기화 작업을 하지 않음

 

예제 코드 Television, TelevisionEx

더보기
더보기
package sec01;

public class Television {
	static String company = "MyCompany";
	static String model = " LCD";
	static String info;
	
	static {
		info = company + "-" + model;
	}
	
}
package sec01;

public class TelevisionEx {

	public static void main(String[] args) {
		System.out.println(Television.info);

	}

}


[인스턴스 멤버 사용 불가]
- 정적 메소드와 정적 블록은 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없으며 this도 사용할 수 없음
- 정적 메소드와 정적 블록에서 인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성하고 참조 변수로 접근

 

예시 Car2

더보기
더보기
package sec01;

public class Car2 {
	// 인스턴스 필드 선언
	int speed;
	
	// 인스턴스 메소드 선언
	void run() { 
		System.out.println(speed + "로 달립니다.");
	}
	
	static void simulate() {
		//객체 생성
		Car2 myCar = new Car2();
		//인스천스 맴버 사용
		myCar.speed = 200;
		myCar.run();
	}
	
	public static void main(String[] args) { 
		// ↑ main 메소드에 static이 있기때문에 정적 메소드이다
			simulate(); // simulate();는 정적 메소드라 바로 호출 가능
			
			// 객체 생성
			Car2 myCar = new Car2();
			// 인스턴스 맴버 사용
			myCar.speed = 60; // 인스턴스 맴버를 사용할때는 객체를 생성해서 사용해야한다
			myCar.run();

			}

	}

[final 필드와 상수]

final 필드
- 초기값이 저장되면 최종값이 되어 프로그램 실행 도중 수정 불가

 

final 필드의 초기값 주는 방법
- 단순 값일 경우 필드 선언 시 초기화(주로 정적 필드(상수)일 경우)
- 객체 생성 시 외부 데이터로 초기화 필요한 경우 생성자에서 초기화(주로 인스턴스 필드일 경우)


인스턴스 final 필드
- 객체에 한번 초기화된 데이터를 변경 불가로 만들 경우: ex) 주민 번호

final 타입 필드 [ = 초기값];  ex) final String ssn; //생성자에서 초기화


- 정적 final 필드 (관례적으로 모두 대문자로 작성)
   불편의 값인 상수를 만들 경우: ex) PI

static final 타입 상수 = 초기값;

 

final필드 예제 Korean, KoreanEx

더보기
더보기
package sec01;

public class Korean {
	// 인스턴스 final 필드 선언
	final String nation = "대한민국";
	final String ssn;
	
	// 인스턴스 필드 선언
	String name;
	
	// 생성자 선언
	public Korean(String ssn, String name) {
		this.ssn = ssn;
		this.name = name;
	}
}
package sec01;

public class KoreanEx {

	public static void main(String[] args) {
		// 객체 생성시 주민번호와 이름 전달
		Korean k1 = new Korean("123456-1234567", "김자바");
		
		// 필드값 읽기
		System.out.println(k1.nation);
		System.out.println(k1.ssn);
		System.out.println(k1.name);

//		Final 필드는 값을 변경 x
//		k1.nation = "USA";
//		k1.ssn = "123-12-1234";
		

//		비 final 필드는 값 변경 가능		
		k1.name = "김자바2";
		

	}

}

상수 에제 Earth, EarthEx

더보기
더보기
package sec01;

public class Earth {
	// 상수 선언 및 초기화
	static final double EARTH_RADIUS = 6400;
	
	// 상수 선언
	static final double EARTH_SURFACE_AREA;
	
	// 정적 블록에서 상수 초기화
	static {
		EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
	}
}
package sec01;

public class EarthEx {

	public static void main(String[] args) {
		// 상수 읽기
		System.out.println("지구의 반지름 : " + Earth.EARTH_RADIUS + " km");
		System.out.println("지구의 표면적 : " + Earth.EARTH_SURFACE_AREA + " km^2");

	}

}

Quiz. Circle. Java, CircleArray.java (class)

Circle클래스로 객체 5개를 가지는 배열을 생성하고, Circle 객체의 

반지름(매개변수)을 0에서 4까지 각각 지정한 후, 면적을 출력하세요.
면적 = 3.14 * 반지름 * 반지름
출력:
반지름0 원의 넓이 : 0 
반지름1 원의 넓이 : 3 
반지름2 원의 넓이 : 12 
반지름3 원의 넓이 : 28 
반지름4 원의 넓이 : 50 

더보기
더보기
package sec01;

class Circle {
	// 필드
    int radius;

    // 생성자
    public Circle(int radius) {
        this.radius = radius;
    }

    // 메서드
    public double getArea() {
        return (int)(3.14 * radius * radius);
    }
}
package sec01;

public class CircleArray {

    public static void main(String[] args) {
    	// 객체 인스턴스 생성(array로 선언)
        Circle[] circles = new Circle[5];

        // 반지름 0 ~ 4인 Circle 객체 생성
        for (int i = 0; i < circles.length; i++) {
            circles[i] = new Circle(i);
        }

        // 면적 출력
        for (int i = 0; i < circles.length; i++) {
            System.out.println(
                "반지름" + circles[i].radius + " 원의 넓이 : " + circles[i].getArea()
            );
        }
    }
}

Quiz. Tv.java, TvEx.java (class)

다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를
작성하세요. brand, year, inch 필드, 생성자, show()메서드 구성.
출력:
LG에서 만든 2017년형 32인치 TV

더보기
더보기
package sec01;

public class Tv {
	//필드 선언
	String brand;
	int year;
	int inch;
	
	// 생성자
	public Tv(String brand, int year, int inch) {
		this.brand = brand;
		this.year = year;
		this.inch = inch;
	}
	// show() 메서드	
	 void show() {
	        System.out.println(
	            brand + "에서 만든 " + year + "년형 " + inch + "인치 TV"
	        );
	 }
	
}
package sec01;

public class TvEx {

	public static void main(String[] args) {
		Tv tv = new Tv("LG", 2017, 32);
		
		tv.show();

	}

}

[패키지]

프로젝트 개발 시 클래스를 체계적으로 관리하기 위해 패키지를 사용한다.
클래스와 클래스의 멤버를 사용 범위에 맞게 접근 제한자를 활용한다. 

- 패키지의 물리적인 형태는 파일 시스템의 폴더
- 패키지는 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할
- 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식
- 클래스의 전체 이름은 패키지+클래스 사용해서 다음과 같이 표현
   상위패키지.하위패키지.클래스
   com.mycompany.A
   com.yourcompany.B

 

[패키지 선언]

- 클래스 작성 시 해당 클래스가 어떤 패키지에 속할 것인지를 선언

package 상위 패키지, 하위패키지;

public class Class { ... }

예시)
package com.mycompany;

public class Car { ... }

- 패키지 이름 규칙

    숫자로 시작 불가
    _ 및 $ 제외한 특수문자 사용 불가
    java로 시작하는 패키지는 자바 표준 API 에서만 사용하므로 사용 불가
   모두 소문자로 작성하는 것이 관례

 

 import문
- 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속된 경우
- 해당 패키지 클래스 또는 인터페이스 가져와 사용할 것임을 컴파일러에 통지

import 상위패키지,하위패키지,클래스이름;
import 상위패키지,하위패키지,*;

예시)

package com.mycompany;

import com.hankook.Tire;
[ 또는 import com.hankook.*; ]

public class Car {
	Tire tire = new Tire();
}


- 패키지 선언과 클래스 선언 사이에 작성
- 하위 패키지는 별도로 import를 해야함

import com.hankook.*;
import com.hankook.project.*;


- 다른 패키지에 동일한 이름의 클래스가 있을 경우
    import와 상관없이 클래스 전체 이름을 기술


[접근 제한자]
▪ 중요한 필드와 메소드가 외부로 노출되지 않도록 해 객체의 무결성을 유지하기 위해서 접근 제한자 사용


▪ 접근 제한자는 public, protected, private의 세 가지 종류

접근 제한자 제한 대상 제한 범위
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 같은 패키지이거나, 자식 객체만 사용가능
(default) 클래스, 필드, 생성자, 메소드 같은 패키지
private 필드, 생성자, 메소드 객체 내부

[ public [ protected [default [ private] ] ] ]  <- 범위 예시

 

[클래스의 접근 제한]

- 같은 패키지 내에서만 사용할 것인지 다른 패키지 내에서도 사용할 수 있도록 할 것인지 결정

[생성자의 접근 제한]
- 생성자는 public, default, private 접근 제한을 가질 수 있음

접근 제한자 생성자 설명
public 클래스(...) 모든 패키지에서 생성자를 호출 가능
= 모든 패키지에서 객체를 생성 가능
  클래스(...) 같은 패키지에서만 생성자 호출 가능
= 같은 패키지에서만 객체를 생성 가능
private 클래스(...) 클래스 내부에서만 생성자 호출 가능
= 클래스 내부에서만 객체를 생성 가능

[Getter와 Setter 메소드]

Setter
- 데이터를 검증해서 유효한 값만 필드에 저장하는 메소드

 

Getter
- 필드값이 객체 외부에서 사용하기에 부적절한 경우, 적절한 값으로 변환해서 리턴할 수 있

 

외부에서 객체에 마음대로 접근할 경우 객체의 무결성 깨질 수 있음

 

Setter 메소드
- 외부의 값을 받아 필드의 값을 변경하는 것이 목적
- 매개값 검증하여 유효한 값만 필드로 저장할 수 있음

 

Getter 메소드
- 외부로 필드값을 전달하는 것이 목적
- 필드값을 가공해서 외부로 전달할 수도 있음

 

예제 Car , CarEx 코드

더보기
더보기
package sec03;

public class Car {
	// 필드 선언
	private int speed;
	private boolean stop;
	
//	public int getSpeed() {
//		return speed;
//	}
//	public void setSpeed(int speed) {
//		this.speed = speed;
//	}
//	public boolean isStop() {
//		return stop;
//	}
//	public void setStop(boolean stop) {
//		this.stop = stop;
//	}
	
	//speed 필드의 Getter / Setter 선언
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		if(speed <= 0) {
			this.speed = 0;
			return;
		} else {
			this.speed = speed;
			this.stop = false;
		}
	}
	
	// stop 필드의 Getter/Setter 선언
	public boolean isStop() {
		return stop;
	}
	public void setStop(boolean stop) {
		this.stop = stop;
		if(stop == true) this.speed = 0;
		
	}
}
package sec03;

public class CarEx {

	public static void main(String[] args) {
		// 객체 생성
		Car myCar = new Car();
		
		//잘못된 속도 변경
		myCar.setSpeed(-50);
		System.out.println("현재속도: " + myCar.getSpeed());
		
		//올바른 속도 변경
		myCar.setSpeed(60);
		System.out.println("현재속도: " + myCar.getSpeed());
		
		//멈춤
		if(!myCar.isStop()) {
			myCar.setStop(true);
		}
		System.out.println("현재속도: " + myCar.getSpeed());
	}

}

[싱글톤 패턴]
- 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아서

    외부에서 마음대로 객체를 생성하지 못하게 함
- 대신 싱글톤 패턴이 제공하는 정적 메소드를 통해 간접적으로 객체를 얻을 수 있음

public class 클래스 {
    //private 접근 권한을 갖는 정적 필드 선언과 초기화
    private static 클래스 singleton = new 클래스();

    //private 접근 권한을 갖는 생성자 선언
    private 클래스() {}

    //public 접근 권한을 갖는 정적 메소드 선언
    public static 클래스 getInstance() {
    	return singleton;

    }

}

 

[싱글톤 (singleton)]
- 전체 프로그램에서 단 하나의 객체만 만들도록 보장하는 코딩 기법
- 싱글톤 작성 방법
    클래스 외부에서 new 연산자 통해 생성자 호출하는 것 불가하도록 private 접근 제한자 사용
    자신의 타입인 정적 필드 선언 후 자신의 객체 생성해 초기화
    외부에서 호출할 수 있는 getInstance() 선언
    정적 필드에서 참조하는 자신의 객체 리턴

 

예제 Singleton, SingletonEx 코드

더보기
더보기
package sec03;

public class Singleton {
    //private 접근 권한을 갖는 정적 필드 선언과 초기화
    private static Singleton singleton = new Singleton();

    //private 접근 권한을 갖는 생성자 선언
    private Singleton() {
	}

    //public 접근 권한을 갖는 정적 메소드 선언
    public static Singleton getInstance() {
    	return singleton;
    }

}
package sec03;

public class SingletonEx {

	public static void main(String[] args) {
//		Singleton obj1 = new Singleton(); //컴파일 에러
		Singleton obj1 = Singleton.getInstance();
		Singleton obj2 = Singleton.getInstance();
		
		// 동일한 객체를 참조하는지 확인
		if(obj1 == obj2) {
			System.out.println("같은 Singleton 객체 입니다.");
		} else {
			System.out.println("다른 Singleton 객체 입니다.");
		}
	}

}

=> 오로지 한개의 객체만 생성해서 구현하고 싶을때 싱글톤 패턴을 사용한다.


quiz

getInstance 구현하는 코드 Singleton, SingletonEx

더보기
더보기
package quiz;

public class Singleton {
	private static Singleton a = new Singleton();
	
	private Singleton() {}
	
	private int number;
	public int getNumber() {
		return number;
	}
	
	public void setNumber(int number) {
		this.number = number;
	}
	
    public static Singleton getInstance() {
    	return a;
    }
}
package quiz;

public class SingletonEx {

	public static void main(String[] args) {
		Singleton s = Singleton.getInstance();
		
		s.setNumber(100);
		System.out.println(s.getNumber());

	}

}

Quiz.SongEx.java (class)

노래 한곡을 나타내는 song 클래스를 작성하세요.

Song은 다음 필드로 구성됩니다.

- 노래의 제목을 나타내는 title

- 가수를 나타내는 artist

- 노래가 발표된 연도를 나타내는 year

- 국적을 나타내는 country

또한 Song 클래스에 다음 생성자와 메소드를 작성하세요

- 생성자 2개 : 기본 생성자와 매개변수로 모든 필드를 초기화 하는 생성자

this("title", "artist", 0000, "country");

- 노래 정보를 출력하는 show() 메소드

출력 :

1978년 스웨덴국적의 ABBA가 부른 Dancing Queen

더보기
더보기
package quiz;

public class Song {
    String title;
    String artist;
    int year;
    String country;

    // 기본 생성자
    Song() {
        this("title", "artist", 0000, "country");
    }

    // 모든 필드를 초기화하는 생성자
    Song(String title, String artist, int year, String country) {
        this.title = title;
        this.artist = artist;
        this.year = year;
        this.country = country;
    }

    // 노래 정보 출력 메소드
    void show() {
        System.out.println(
            year + "년 " + country + "국적의 "
            + artist + "가 부른 " + title
        );
    }
}
package quiz;

public class SongEx {

	public static void main(String[] args) {
		Song song = new Song("Dancing Queen", "ABBA", 1978, "스웨덴");
		song.show();
	}
}

quiz.StudentEx,java (class)

아래 테이블과 같은 맴버 필드를 가지는 Student(라이브러리)클래스를 작성하세요.

타입 필드명 설명
String name 학생 이름
int ban
int no 번호
int kor 국어점수
int eng 영어점수
int math 수학점수

 

Student클래스에 다음 내용이 포함된 3개의 메소드를 작성하시오

메소드 명 반환타입 매개변수 기능
getTotal int 없음 국어, 영어, 수학 점수를 모두 더해서 반환한다
getAverage float 없음 총점을 과목수로 나눈 평균을 반환
info void 없음 모든 필드와 메서드를 호출

출력:

더보기
더보기

이름 : 고길동

반 : 3

번호 : 17

국어점수 : 92

영어점수 : 63

수학점수 : 74

총점 : 229

평균 : 76.3

 

더보기
더보기
package quiz;

public class Student {
    String name;   // 학생 이름
    int ban;       // 반
    int no;        // 번호
    int kor;       // 국어 점수
    int eng;       // 영어 점수
    int math;      // 수학 점수
    
    
    //생성자
    public Student() {}
    
	// 생성자 오버로딩
	public Student (String name, int ban, int no, int kor, int eng, int math) {
		this.name = name;
		this.ban = ban;
		this.no = no;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

    // 총점 반환
    public int getTotal() {
        int sum = this.kor + this.eng + this.math;
        return sum;
    }

    // 평균 반환
    public float getAverage() {
         float avg = getTotal() / 3.0f;
         return avg;
    }

    // 모든 필드와 메소드 출력
    public void info() {
        System.out.println("이름 : " + name);
        System.out.println("반 : " + ban);
        System.out.println("번호 : " + no);
        System.out.println("국어점수 : " + kor);
        System.out.println("영어점수 : " + eng);
        System.out.println("수학점수 : " + math);
        System.out.println("총점 : " + getTotal());
        System.out.println("평균 : " + getAverage());
    }
}
package quiz;

public class StudentEx {

    public static void main(String[] args) {

        Student s = new Student();

        s.name = "고길동";
        s.ban = 3;
        s.no = 17;
        s.kor = 92;
        s.eng = 63;
        s.math = 74;

        s.info();
    }
}

Quiz. BankEx.java (class)

1.Bank,java 라이브러리 클래스에 예금 기능 / 출금 기능 / 조회 / 종료 기능을 각각 메서드를 만듬

2. 실행 클래스의 메인 메서드에서 종료(메서드)를 선택하지 않으면 메뉴가 반복적으로 출력되도록

3. 각각의 메뉴 선택시 메서드를 통해서 해당 기능을 구현

4. 출금기능은 잔액보타 큰 액수는 출금 x

5. 잔액이 1,000,000원이 넘어서도록 입금 x

예) 잔액이 900,000원 있는데 110,000원을 입금하면 잔액이 1,010,000으로 1,000,000원을 초과하므로 입금을 거부해야 합니다.

 

출력 예시:

안녕하세요 MIT BANK입니다.

*********************************

MIT 뱅크에 오신것을 환영합니다.

메뉴를 선택해 주세요

1. 예금

2.출금

3.잔액조회

4.종료

>1

예금할 금액을 입력해주세요.

860000

860000원을 입금하였습니다.

총 금액은: 860000입니다.

*********************************

더보기
더보기
package quiz;

import java.util.Scanner;

public class Bank{

    int balance = 0;
    final int MAX_BALANCE = 1_000_000;
    Scanner scan = new Scanner(System.in);

    // 예금
    void deposit(){
        System.out.println("예금할 금액을 입력해주세요.");
        int money = scan.nextInt();

        if (balance + money > MAX_BALANCE) {
            System.out.println("잔액이 1,000,000원을 초과할 수 없습니다.");
            return;
        }

        balance += money;
        System.out.println(money + "원을 입금하였습니다.");
        System.out.println("총 금액은: " + balance + "입니다.");
    }

    // 출금
    void withdraw(){
        System.out.println("출금할 금액을 입력해주세요.");
        int money = scan.nextInt();

        if (money > balance) {
            System.out.println("잔액이 부족합니다.");
            return;
        }

        balance -= money;
        System.out.println(money + "원을 출금하였습니다.");
        System.out.println("총 금액은: " + balance + "입니다.");
    }

    // 잔액 조회
    void check(){
        System.out.println("현재 잔액은: " + balance + "입니다.");
    }

    // 종료
    void exit(){
        System.out.println("프로그램을 종료합니다.");
    }
}
package quiz;

import java.util.Scanner;

public class BankEx{

    public static void main(String[] args){

        Scanner scan = new Scanner(System.in);
        Bank bank = new Bank();
        boolean run = true;

        System.out.println("안녕하세요 MIT BANK입니다.");

        while (run) {
            System.out.println("*********************************");
            System.out.println("MIT 뱅크에 오신것을 환영합니다.");
            System.out.println("메뉴를 선택해 주세요");
            System.out.println("1. 예금");
            System.out.println("2. 출금");
            System.out.println("3. 잔액조회");
            System.out.println("4. 종료");
            System.out.print("> ");

            int menu = scan.nextInt();

            switch (menu) {
                case 1:
                    bank.deposit();
                    break;
                case 2:
                    bank.withdraw();
                    break;
                case 3:
                    bank.check();
                    break;
                case 4:
                    bank.exit();
                    run = false;
                    break;
                default:
                    System.out.println("메뉴를 다시 선택해주세요.");
            }
        }

        scan.close();
    }
}
안녕하세요 MIT BANK입니다.
*********************************
MIT 뱅크에 오신것을 환영합니다.
메뉴를 선택해 주세요
1. 예금
2. 출금
3. 잔액조회
4. 종료
> 1
예금할 금액을 입력해주세요.
1029581929
잔액이 1,000,000원을 초과할 수 없습니다.
*********************************
MIT 뱅크에 오신것을 환영합니다.
메뉴를 선택해 주세요
1. 예금
2. 출금
3. 잔액조회
4. 종료
> 1
예금할 금액을 입력해주세요.
144444
144444원을 입금하였습니다.
총 금액은: 144444입니다.
*********************************
MIT 뱅크에 오신것을 환영합니다.
메뉴를 선택해 주세요
1. 예금
2. 출금
3. 잔액조회
4. 종료
> 2
출금할 금액을 입력해주세요.
14
14원을 출금하였습니다.
총 금액은: 144430입니다.
*********************************
MIT 뱅크에 오신것을 환영합니다.
메뉴를 선택해 주세요
1. 예금
2. 출금
3. 잔액조회
4. 종료
> 3
현재 잔액은: 144430입니다.
*********************************
MIT 뱅크에 오신것을 환영합니다.
메뉴를 선택해 주세요
1. 예금
2. 출금
3. 잔액조회
4. 종료
> 4
프로그램을 종료합니다.

 

 

'대우개발원 수업 내용 > Java 정리' 카테고리의 다른 글

Java 개념정리 12일차  (2) 2026.01.15
Java 개념정리 11일차  (1) 2026.01.13
Java 개념정리 9일차  (1) 2026.01.12
Java 개념정리 8일차  (0) 2026.01.12
Java 개념정리 7일차  (0) 2026.01.12