2026. 1. 13. 16:47ㆍ대우개발원 수업 내용/Java 정리
클래스, 배열, 상속, 생성자 다시 공부
Quiz. AccountEx.java (class)
1. 예금주와 계좌번호, 초기 예금액을 입력 받아서예금 계좌를 개설한다.
2. 계좌 정보는 총 100명분의 정보만 저장이 가능하도록 합니다.
static Account[] accounts = new Account[100];
3. 은행업무를 하고 싶다면 계좌번호를 입력해서있다면 업무를 볼 수 있고, 없다면 해당 계좌가없다고 출력하세요.
4. 은행 업무(메소드 생성)에 조회 시 해당 계좌의잔액을 조회 할 수 있고, 입금과 출금 기능을 이용할 수 있습니다.
5. 출금 시 잔액 보다 많은 금액을 출금할 수 없습니다.
1단계: [Account클래스]
필드 : 예금주, 계좌번호, 잔고
메서드 : 예금을 입금하는 메서드, 예금을 출금하는 메서드
생성자 : 예금주, 계좌번호, 초기 예금액을 입력 받아서 인스턴스 생성하는 생성자
-----------------------------------------------------
2단계 : [AccountEx클래스] main 메서드
메뉴로 계좌 생성기능, 은행업무 기능, 종료기능 작동시키는 while~ switch문을 완성
------------------------------------------------------
3단계 [AccountEx클래스] Account를 담는 배열타입의static변수를 생성
3-1단계 : 계좌 생성: 3개의 정보를 입력 받고 인스턴스를생성한 후 위 변수 순서대로에 담는다.
3-2단계 : 은행 업무 : 계좌 번호를 입력 요구하고 성공하면입금 출금, 잔액 조회 기능을 할 수 있다.

package quiz;
public class Account {
//필드
String accountNum;
int balance=0;
String name;
//생성자
public Account(String accountNum, int balance, String name){
this.accountNum = accountNum;
this.balance = balance;
this.name = name;
}
//Getter 메소드
public String getName() {
return name;
}
public String getAccountNum() {
return accountNum;
}
//입금
public void deposit(int money) {
System.out.println(money+"원 입금합니다.");
this.balance += money;
System.out.println("입금완료");
}
//출금
public void withdraw(int money) {
System.out.println(money+"원 출금합니다.");
if(money > balance) {
System.out.println("잔액 부족");
}else {
this.balance -= money;
System.out.println("출금 완료");
}
}
// 잔액 조회
public void checkMyBalance() {
System.out.println("잔액을 조회합니다.");
System.out.println("잔액 : "+this.balance);
}
}
package quiz;
import java.util.Scanner;
public class AccountEx {
static Scanner scan = new Scanner(System.in);
static Account[] accounts = new Account[100];// 100명분 계좌를 저장할 수 있는 배열
public static void main(String[] args) {
boolean run =true;
while(run) {
System.out.println("그린 뱅크에 오신것을 환영합니다.");
System.out.println("메뉴를 선택해 주세요.");
System.out.println("1. 계좌 생성");
System.out.println("2. 계좌 업무");
System.out.println("3. 종료");
System.out.print("선택>");
int selectMenu = Integer.parseInt(scan.nextLine());
switch(selectMenu) {
case 1: // 계좌 생성 기능
System.out.println("계좌를 생성합니다.");
System.out.println("예금주 이름을 입력하세요.");
System.out.print(">");
String name = scan.nextLine();
System.out.println("계좌번호를 입력하세요.");
System.out.print(">");
String accountNum = scan.nextLine();
System.out.println("초기 입금액을 입력하세요.");
System.out.print(">");
int balance = Integer.parseInt(scan.nextLine());
Account newAccount = new Account(accountNum,balance,name);
for(int i=0;i<accounts.length;i++) {
if(accounts[i]==null) {
accounts[i]=newAccount;
break;
}
}
System.out.println("계좌 생성");
break;
case 2: // 계좌 업무 : 입금, 출금, 조회
int chkAccIdx = -1;
System.out.println("사용하고자 하는 계좌 번호를 입력하세요.");
System.out.print(">");
String selectAccountNum = scan.nextLine();
for(int i=0;i<accounts.length;i++) {
if(accounts[i] == null) {
continue;
}else if(accounts[i].getAccountNum().equals(selectAccountNum)){
chkAccIdx = i;
break;
}
}
if(chkAccIdx == -1) {
System.out.println("해당 계좌를 찾을수 없습니다.");
}else {
//bankFunction() 실행
bankFunction(chkAccIdx);
}
break;
case 3: //종료
System.out.println("프로그램 종료합니다.");
run = false;
break;
default:
System.out.println("잘못 입력했습니다.");
System.out.println("다시 확인해 주세요.");
}
}
}
private static void bankFunction(int chkAccIdx) {
//실제 계좌를 가지고 업무를 사용하는 메서드
while(true) {
System.out.println(accounts[chkAccIdx].getName()+"님 환영합니다.");
System.out.println("업무를 선택하세요.");
System.out.println("1. 입금");
System.out.println("2. 출금");
System.out.println("3. 잔액 조회");
System.out.println("0. 메인메뉴 돌아가기");
System.out.print(">");
int selectNum = Integer.parseInt(scan.nextLine());
int money = 0;
switch(selectNum) {
case 1://입금
System.out.println("입금 금액을 입력하세요.");
money = Integer.parseInt(scan.nextLine());
accounts[chkAccIdx].deposit(money);
break;
case 2://출금
System.out.println("출금 금액을 입력하세요.");
money = Integer.parseInt(scan.nextLine());
accounts[chkAccIdx].withdraw(money);
break;
case 3://조회
accounts[chkAccIdx].checkMyBalance();
break;
case 0:
System.out.println("메인 메뉴로 돌아갑니다.");
return;
default:
System.out.println("잘못 입력했습니다.");
System.out.println("다시 확인해 주세요.");
}
}
}
}
Quiz. MonthScheduleEx.java
문제 설명
하루의 할 일을 표현하는 클래스 Day는 다음과 같이 주어진다.
Day 클래스
class Day {
private String work; // 하루의 할 일을 나타내는 문자열
public void set(String work) {
this.work = work;
}
public String get() {
return work;
}
public void show() {
if (work == null)
System.out.println("없습니다.");
else
System.out.println(work + "입니다.");
}
}
Day 클래스는 하루의 할 일을 저장하고 출력하는 기능을 가진다.
과제 내용
한 달의 할 일을 관리하는 클래스 MonthSchedule을 작성하시오.
MonthSchedule 클래스는 Day 객체 배열을 이용하여 한 달 동안의 일정을 관리해야 하며,
사용자로부터 입력을 받아 다음과 같은 세 가지 기능을 제공해야 한다.
- 할 일 입력
- 할 일 보기
- 프로그램 종료
요구 사항
1. MonthSchedule 클래스
- Day 객체 배열을 필드로 가진다.
- 생성자를 통해 한 달의 날짜 수를 전달받는다.
- 다음 메서드를 반드시 포함한다.
메서드명기능
| input() | 날짜와 할 일을 입력받아 저장 |
| view() | 날짜를 입력받아 해당 날짜의 할 일 출력 |
| finish() | 프로그램 종료 메시지 출력 |
| run() | 메뉴를 출력하고 기능을 반복 실행 |
2. MonthScheduleEx 클래스
- main() 메서드를 포함하는 실행 클래스이다.
- MonthSchedule 객체를 생성하고 run() 메서드를 호출한다.
MonthSchedule april = new MonthSchedule(30);
april.run();
실행 예시
이번달 스케쥴 관리 프로그램.
할일(입력:1, 보기:2, 끝내기:3) >>1
날짜(1~30)?8
할일(빈칸없이입력)?공부
할일(입력:1, 보기:2, 끝내기:3) >>1
날짜(1~30)?15
할일(빈칸없이입력)?놀기
할일(입력:1, 보기:2, 끝내기:3) >>2
날짜(1~30)?15
15일의 할 일은 놀기입니다.
할일(입력:1, 보기:2, 끝내기:3) >>2
날짜(1~30)?8
8일의 할 일은 공부입니다.
할일(입력:1, 보기:2, 끝내기:3) >>3
프로그램을 종료합니다.
package quiz;
public class Day {
private String work; // 하루의 할 일
public void set(String work) {
this.work = work;
}
public String get() {
return work;
}
public void show() {
if (work == null)
System.out.println("없습니다.");
else
System.out.println(work + "입니다.");
}
}
package quiz;
import java.util.Scanner;
public class MonthSchedule {
private Scanner sc =new Scanner(System.in, "EUC-KR");
private Day days[];
MonthSchedule(int day) {
this.days = new Day[day];
for(int i=0; i<days.length; i++) {
days[i] = new Day();
}
sc = new Scanner(System.in);
}
private void input() {
System.out.print("날짜(1~30)?");
int day = sc.nextInt();
System.out.print("할일(빈칸없이입력)?");
String work = sc.next();
day--; //index num 맞추기 위해
if(day < 0 || day > 30) {
System.out.println("날짜를 잘못 입력하였습니다.");
return;
}
days[day].set(work);
}
private void view() {
System.out.print("날짜(1~30)?");
int day = sc.nextInt();
day--;
if(day < 0 || day > 30) { // 0~29
System.out.println("날짜를 잘못 입력하였습니다.");
return;
}
System.out.print((day+1)+"일의 할 일은 ");
days[day].show();
}
private void finish() {
System.out.println("프로그램을 종료합니다.");
sc.close();
}
public void run() {
System.out.print("이번달 스케쥴 관리 프로그램.");
while(true) {
System.out.println();
System.out.print("할일(입력:1, 보기:2, 끝내기:3) >>");
int select = sc.nextInt();
switch(select) {
case 1: input(); break;
case 2: view(); break;
case 3: finish(); return;
}
}
}
}
package quiz;
public class MonthScheduleEx {
public static void main(String[] args) {
MonthSchedule april = new MonthSchedule(30);
april.run();
}
}
[상속과 다형성]
객체 지향 프로그램에서 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다.
상속
- 이미 개발된 클래스를 재사용하여 새로운 클래스를 만들기에 중복되는 코드를 줄임
- 부모 클래스의 한번의 수정으로 모든 자식 클래스까지 수정되는 효과가 있어 유지보수 시간이 줄어듬
클래스 상속
▪ 자식 클래스 선언 시 부모 클래스 선택
▪ extends 뒤에 부모 클래스 기술
▪ 여러 개의 부모 클래스 상속할 수 없음
▪ 부모 클래스에서 private 접근 제한 갖는 필드와 메소드는 상속 대상에서 제외
▪ 부모와 자식 클래스가 다른 패키지에 존재할 경우 default 접근 제한된 필드와 메소드 역시 제외
[부모 생성자 호출]
❖ 자식 객체 생성할 때 부모 객체가 먼저 생성되고 그 다음 자식 객체가 생성됨
▪ 자식 생성자의 맨 첫 줄에서 부모 생성자가 호출됨
▪ 명시적으로 부모 생성자 호출하려는 경우
예제 코드 CellPhone ↓

package sec01;
public class CellPhone {
//필드
String model;
String color;
//생성자 생략
// 메소드
void powerOn() { System.out.println("전원을 켭니다"); }
void powerOff() { System.out.println("전원을 끕니다"); }
void bell() { System.out.println("벨이 울립니다"); }
void sendVoice(String message) { System.out.println("자기: " + message); }
void receiveVoice(String message) { System.out.println("상대방 : " + message); }
void hangUP() { System.out.println("전화를 끊습니다"); }
}
package sec01;
public class DmbCellPhoneEx {
public static void main(String[] args) {
// DmbCellPhone 객체 생성
DmbCellPhone dmbCellPhone = new DmbCellPhone("자바폰", "검정", 10);
// CellPhone으로 부터 상속 받은 필드
System.out.println("모델: " + dmbCellPhone.model);
System.out.println("색상: " + dmbCellPhone.color);
// DmbCellPhone의 필드
System.out.println("채널: " + dmbCellPhone.channel);
// CellPhone으로부터 상속 받은 메소드 호출
dmbCellPhone.powerOn();
dmbCellPhone.bell();
dmbCellPhone.sendVoice("여보세요");
dmbCellPhone.receiveVoice("안녕하세요! 저는 홍길동인데요");
dmbCellPhone.sendVoice("아~ 예 반갑습니다.");
dmbCellPhone.hangUP();
// DmbCellPhone의 메소드 호출
dmbCellPhone.turnOnDbm();
dmbCellPhone.changeChannelDmb(12);
dmbCellPhone.turnOffDmb();
}
}
package sec01;
public class DmbCellPhone extends CellPhone{
//필드
int channel;
// 생성자
// DmbCellPhone() {
// super();
// }
//
DmbCellPhone(String model, String color, int channel) {
this.model = model;
this.color = color;
this.channel = channel;
}
// 메소드
void turnOnDbm() {
System.out.println("채널 " + channel + "번 DMB 방송 수신을 시작합니다.");
}
void changeChannelDmb(int channel) {
this.channel = channel;
System.out.println("채널 " + channel + "번으로 바꿉니다.");
}
void turnOffDmb() {
System.out.println("DMB 방송 수신을 멈춥니다.");
}
}
예제 코드 People ↓

package sec01;
public class People {
public String name;
public String ssn;
public People(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
}
package sec01;
public class StudentEx {
public static void main(String[] args) {
Student student = new Student("홍길동", "123456-1234567", 1);
System.out.println("name : " + student.name);
System.out.println("ssn: " + student.ssn);
System.out.println("studentNo : " + student.studentNO);
}
}
package sec01;
public class Student extends People{
public int studentNO;
public Student(String name, String ssn, int studentNo) {
super(name, ssn);
this.studentNO = studentNo;
}
}
[메소드 재정의]
메소드 재정의(오버라이딩 / Overriding)
▪ 부모 클래스의 메소드가 자식 클래스에서 사용하기에 부적합할 경우 자식 클래스에서 수정하여 사용
▪ 메소드 재정의 방법
• 부모 메소드와 동일한 시그니처 가져야 함
• 접근 제한 더 강하게 재정의할 수 없음
• 새로운 예외를 throws 할 수 없음
▪ 메소드가 재정의될 경우 부모 객체 메소드가 숨겨지며, 자식 객체에서 메소드 호출하면 재정의된 자식 메소드가 호출됨
예제코드 Airplane

package sec01;
public class Airplane {
public void land() {
System.out.println("착륙합니다.");
}
public void fly() {
System.out.println("일반비행합니다.");
}
public void takeOff() {
System.out.println("이륙합니다.");
}
}
package sec01;
public class SupersonicAirplaneEx {
public static void main(String[] args) {
SupersonicAirplane sa = new SupersonicAirplane();
sa.takeOff();
sa.fly();
sa.flyMode = SupersonicAirplane.SUPERSONIC;
sa.fly();
sa.flyMode = SupersonicAirplane.NORMAL;
sa.fly();
sa.land();
}
}
package sec01;
public class SupersonicAirplane extends Airplane{
public static final int NORMAL = 1;
public static final int SUPERSONIC = 2;
public int flyMode = NORMAL;
@Override
public void fly() {
if(flyMode == SUPERSONIC) {
System.out.println("초음속비행합니다.");
} else {
// Airplane 객체의 fly() 메소드 호출
super.fly();
}
}
}
[부모 메소드 호출]
- 자식 메소드 내에서 super 키워드와 도트(.) 연산자를 사용하면 숨겨진 부모 메소드를 호출
- 부모 메소드를 재사용함으로써 자식 메소드의 중복 작업 내용을 없애는 효과
[Overiding vs Overloading]
Overloading / 확장 : 같은 이름의 메서드 여러 개를 가지면서 매개변수의 유형과 개수가 다르도록 사용하는 것
Overriding / 재정의 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것
'대우개발원 수업 내용 > Java 정리' 카테고리의 다른 글
| Java 개념 정리 13일차 (1) | 2026.01.15 |
|---|---|
| Java 개념정리 12일차 (2) | 2026.01.15 |
| Java 개념정리 10일차 (1) | 2026.01.12 |
| Java 개념정리 9일차 (1) | 2026.01.12 |
| Java 개념정리 8일차 (0) | 2026.01.12 |