본문 바로가기
휴먼 IT 교육 수업 메모

[휴먼IT] 휴먼IT JAVA 5일차 수업 메모 (상속) -250108

by demianpark127 2025. 1. 8.
SMALL

package Class;

class 사람 {
	String 이름;
	String 직업;
	String 성별;
	int 나이;
	String 혈액형;
	
	사람(String 이름) {
		this("값","값","값"); //this() 다른 생성자를 오버로딩으로 호출한다. 반드시 첫줄에 작성해야한다.
		System.out.println("첫번째 생성자");		
	}사람(String 이름, String 직업) {
		System.out.println("두번째 생성자");
	}사람(String 이름, String 직업, String 성별) {
		System.out.println("세번째 생성자");
	}사람(String 이름, String 직업, String 성별, int 나이) {
		System.out.println("네번째 생성자");
	}사람(String 이름, String 직업, String 성별, int 나이, String 혈액형) {
		System.out.println("다섯번째 생성자");
	}
	
	//메소드
	String 소개하기() {
		String str = "나의 이름은 " + this.이름+"이고, 직업은 " + this.직업+
				", 성별은 "+성별+", 나이는 "+나이+"혈액형"+혈액형;
		System.out.println(str);
		
		return str;
	}
	
	//나이를 설정하는 메서드 작성
	void set나이(int 나이) {
		this.나이 = 나이;
	}
	
	//나이값을 읽어오는 메서드 작성
	int get나이() {
		return 나이;	
	}	
}

public class C3_사람Ex {
	public static void main(String[] args) {
		
		//1. 객체를 생성한다
		사람 홍길동 = new 사람("값","값","값",100); // 오버로딩
		사람 이순신 = new 사람("값");
		
		System.out.println();
		사람 강감찬 = new 사람("강감찬","장군","남자",30,"A");
		System.out.println(강감찬.이름);
		System.out.println(강감찬.직업);
		System.out.println(강감찬.성별);
		System.out.println(강감찬.나이);
		
		String str = 강감찬.소개하기();
		System.out.println(str);
		
		//나이값을 반환해주는 메서드를 읽어서 출력해본다
		강감찬.set나이(100);
		int age = 강감찬.get나이();
		System.out.println("강감찬님의 변경된 나이는 " +age+"살입니다.");
		
		System.out.println("강감찬님의 변경된 나이는 "+강감찬.get나이()+"살입니다.");
	}
}

 

 

package Class;

/*
  	Circle 클래스
  	. 외부에 생성
  	. 필드 : int radius						1.pizza를 생성한다
  			string name							-이름,크기
  	. 생성자 : 기본생성자							-출력 : 피자이름,피자면적
  	. 메소드 : double getArea() - 면적구하기
 											2.donut을 생성한다
 */
class Circle {
	String name;
	int radius;
	final double PY = 3.14;
	
	Circle(){
		this.radius = 0;
		this.name = "name";
	}	

	Circle(String name, int radius){
		this.radius = radius;
		this.name = name;
	}
	
	double getArea() {		
		return radius * radius * PY;
	}	
	
	//set메서드
	
	void setRadius(int radius) {
		this.radius = radius;
	}
	void setName(String name) {
		this.name = name;
	}
	
	
}

public class C4_CircleEx {
	public static void main(String[] args) {
        // 1. Pizza 객체 생성
        Circle pizza = new Circle();
        pizza.setRadius(10);
        pizza.setName("자바피자");
        double area = pizza.getArea();
        System.out.println("피자 이름: " + pizza.name);
        System.out.println("피자의 크기: " + area);

        // 2. Donut 객체 생성
        Circle donut = new Circle();
        donut.setRadius(5);
        donut.setName("자바도넛");
        System.out.println("도넛 이름: " + donut.name);
        System.out.println("도넛 면적: " + donut.getArea());
	}

}

 

피자 이름: 자바피자
피자의 크기: 314.0
도넛 이름: 자바도넛
도넛 면적: 78.5

 

package Class;

import java.util.Scanner;

//설계 클래스
class Person {
 // 이름(name) - 문자열, 나이(age) - 정수, 성별(gender) - 문자열
 String name;
 int age;
 String gender;

 // 생성자 - 객체를 생성하는 역할을 한다. 반드시 생성자가 있어야 한다. void/return이 없다
 Person(String name, int age, String gender) {
     this.name = name;
     this.age = age;
     this.gender = gender;
 }
 // 메서드 = 기능(동사), 반환타입/반환안하는타입(void)
 // print() - 이름, 나이, 성별을 출력
 void print() {
     System.out.println("이름: " + name + ", 나이: " + age + ", 성별: " + gender);
 }
}


//실행클래스
public class C5_PersonEx {
	public static void main(String[] args) {		
		
		// 친구들을 생성한다 - 5명 생성
        Person 민수 = new Person("민수", 15, "남");
        Person 철수 = new Person("철수", 19, "남");
        Person 영희 = new Person("영희", 15, "여");
        Person 윤서 = new Person("윤서", 18, "여");
        Person 가영 = new Person("가영", 21, "여");

        // 친구들 출력
        민수.print();
        철수.print();
        영희.print();
        윤서.print();
        가영.print();

        System.out.println("\n--- 새로운 친구 추가 ---");

        // 배열로 친구 추가
        Person[] friends = new Person[5];
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 5; i++) {
            System.out.print((i + 1) + "번째 친구 이름을 입력하세요: ");
            String name = sc.nextLine();

            System.out.print((i + 1) + "번째 친구 나이를 입력하세요: ");
            int age = sc.nextInt();
            sc.nextLine(); // 버퍼 비우기

            System.out.print((i + 1) + "번째 친구 성별을 입력하세요: ");
            String gender = sc.nextLine();

            friends[i] = new Person(name, age, gender); // 객체 생성 후 배열에 저장
        }

        sc.close();

        System.out.println("\n--- 입력한 친구 목록 ---");
        for (Person friend : friends) {
            friend.print();
        }    
	}

}
이름: 민수, 나이: 15, 성별: 남
이름: 철수, 나이: 19, 성별: 남
이름: 영희, 나이: 15, 성별: 여
이름: 윤서, 나이: 18, 성별: 여
이름: 가영, 나이: 21, 성별: 여

--- 새로운 친구 추가 ---
1번째 친구 이름을 입력하세요: 민수
1번째 친구 나이를 입력하세요: 19
1번째 친구 성별을 입력하세요: 남
2번째 친구 이름을 입력하세요: 진
2번째 친구 나이를 입력하세요: 33
2번째 친구 성별을 입력하세요: 남
3번째 친구 이름을 입력하세요: 영희
3번째 친구 나이를 입력하세요: 15
3번째 친구 성별을 입력하세요: 여
4번째 친구 이름을 입력하세요: 수진
4번째 친구 나이를 입력하세요: 22
4번째 친구 성별을 입력하세요: 여
5번째 친구 이름을 입력하세요: 보미
5번째 친구 나이를 입력하세요: 25
5번째 친구 성별을 입력하세요: 여

--- 입력한 친구 목록 ---
이름: 민수, 나이: 19, 성별: 남
이름: 진, 나이: 33, 성별: 남
이름: 영희, 나이: 15, 성별: 여
이름: 수진, 나이: 22, 성별: 여
이름: 보미, 나이: 25, 성별: 여

 

package Class;

import java.util.Scanner;

/*
 	1.클래스를 생성할 수 있다.
 	2.생성된 클래스를 가져다 객체생성할 수 있다
 	3.생성된 객체를 배열에 저장할 수 있다.
 	4.배열 속에 있는 객체의 필드와 메서드에 접근할 수 있다.
 	5.관리프로그램의 프로세스를 이해하여 구현할 수 있다.
 */
public class Goods관리프로그램 {
	
	public static void main(String[] args) {
		/*
		 	.배열을 준비한다
		 	.스캐너를 준비한다
		 	
		 	while() {
		 		. 메뉴 1.제품수 | 2.제품내역등록 | 3. 등록된제품리스트 | 4. 종료
		 		. 메뉴선택
		 		
		 		switch(){
		 			case 1:
		 				등록할 제품수를 입력해주세요
		 				배열의 방개수를 지정하여 생성
		 			case 2:
		 				제품을 등록합니다
		 				제품명>>
		 				제품가격>>
		 				재고량>>
		 				판매량>>
		 				
		 			case 3:
		 				등록된 제품내역을 전체조회합니다.
		 			
		 			case 4:
		 				종료합니다.
		 		
		 		}
		 		프로그램을 종료합니다
		 	}
		 */
		
		Scanner sc = new Scanner(System.in);
        Goods[] goodsArray = null; // 상품 배열
        int productCount = 0;       // 상품 개수 저장 변수

        while (true) {
            System.out.println("\n--- 메뉴 ---");
            System.out.println("1. 제품 수 설정");
            System.out.println("2. 제품 내역 등록");
            System.out.println("3. 등록된 제품 리스트");
            System.out.println("4. 종료");
            System.out.print("메뉴를 선택하세요: ");
            
            int choice = sc.nextInt();
            sc.nextLine(); // 버퍼 비우기

            switch (choice) {
                case 1:
                    // 제품 수 설정
                    System.out.print("등록할 제품 수를 입력해주세요: ");
                    productCount = sc.nextInt();
                    sc.nextLine(); // 버퍼 비우기
                    goodsArray = new Goods[productCount];
                    System.out.println("제품 수가 " + productCount + "개로 설정되었습니다.");
                    break;

                case 2:
                    // 제품 내역 등록
                    if (goodsArray == null) {
                        System.out.println("먼저 제품 수를 설정해주세요.");
                        break;
                    }
                    for (int i = 0; i < goodsArray.length; i++) {
                        System.out.println((i + 1) + "번째 제품 등록");
                        System.out.print("제품명: ");
                        String name = sc.nextLine();
                        System.out.print("제품가격: ");
                        int price = sc.nextInt();
                        System.out.print("재고량: ");
                        int stock = sc.nextInt();
                        System.out.print("판매량: ");
                        int sold = sc.nextInt();
                        sc.nextLine(); // 버퍼 비우기

                        goodsArray[i] = new Goods(name, price, stock, sold);
                    }
                    System.out.println("모든 제품이 등록되었습니다.");
                    break;

                case 3:
                    // 등록된 제품 리스트
                    if (goodsArray == null || goodsArray[0] == null) {
                        System.out.println("등록된 제품이 없습니다.");
                        break;
                    }
                    System.out.println("\n--- 등록된 제품 리스트 ---");
                    for (Goods goods : goodsArray) {
                        if (goods != null) {
                            goods.printGoodsInfo();
                        }
                    }
                    break;

                case 4:
                    // 종료
                    System.out.println("프로그램을 종료합니다.");
                    sc.close();
                    System.exit(0);
                    break;

                default:
                    System.out.println("올바른 메뉴를 선택해주세요.");
            }
        }
	}

}
package Class;

// 상품 클래스
public class Goods {
    String name;   // 제품명
    int price;     // 제품 가격
    int stock;     // 재고량
    int sold;      // 판매량

    // 생성자
    Goods(String name, int price, int stock, int sold) {
        this.name = name;
        this.price = price;
        this.stock = stock;
        this.sold = sold;
    }

    // 제품 정보 출력
    void printGoodsInfo() {
        System.out.println("제품명: " + name + ", 가격: " + price + 
                           ", 재고량: " + stock + ", 판매량: " + sold);
    }
}
--- 메뉴 ---
1. 제품 수 설정
2. 제품 내역 등록
3. 등록된 제품 리스트
4. 종료
메뉴를 선택하세요: 1
등록할 제품 수를 입력해주세요: 3
제품 수가 3개로 설정되었습니다.

--- 메뉴 ---
1. 제품 수 설정
2. 제품 내역 등록
3. 등록된 제품 리스트
4. 종료
메뉴를 선택하세요: 2
1번째 제품 등록
제품명: 냉장고
제품가격: 300000
재고량: 3
판매량: 2
2번째 제품 등록
제품명: 모니터
제품가격: 200000
재고량: 5
판매량: 1
3번째 제품 등록
제품명: 카메라
제품가격: 210000
재고량: 3
판매량: 1
모든 제품이 등록되었습니다.

--- 메뉴 ---
1. 제품 수 설정
2. 제품 내역 등록
3. 등록된 제품 리스트
4. 종료
메뉴를 선택하세요: 3

--- 등록된 제품 리스트 ---
제품명: 냉장고, 가격: 300000, 재고량: 3, 판매량: 2
제품명: 모니터, 가격: 200000, 재고량: 5, 판매량: 1
제품명: 카메라, 가격: 210000, 재고량: 3, 판매량: 1

--- 메뉴 ---
1. 제품 수 설정
2. 제품 내역 등록
3. 등록된 제품 리스트
4. 종료
메뉴를 선택하세요: 4
프로그램을 종료합니다.

 

package Class;

import java.util.Scanner;

//사칙연산 클래스
class Cal {
	 // 덧셈 메서드
	 int add(int a, int b) {
	     return a + b;
	 }
	
	 // 뺄셈 메서드
	 int sub(int a, int b) {
	     return a - b;
	 }
	
	 // 곱셈 메서드
	 int mul(int a, int b) {
	     return a * b;
	 }
	
	 // 나눗셈 메서드
	 double div(int a, int b) {
	     if (b == 0) { // 0으로 나눌 경우 예외 처리
	         System.out.println("오류: 0으로 나눌 수 없습니다.");
	         return Double.NaN; // Not a Number 반환
	     }
	     return (double) a / b;
	 }
}


public class Calculator {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Cal calculator = new Cal(); // 객체 생성
		//두수를 입력받는다
		System.out.println("첫번째 숫자를 입력하세요 >>");
		int a = sc.nextInt();
		System.out.println("두번째 숫자를 입력하세요 >>");
		int b = sc.nextInt();
		
		// Cal의 메소드를 이용해서 사칙연산
        int sum = calculator.add(a, b);
        int difference = calculator.sub(a, b);
        int product = calculator.mul(a, b);
        double quotient = calculator.div(a, b);

        // 결과 출력
        System.out.println("\n--- 사칙연산 결과 ---");
        System.out.println("덧셈 결과: " + sum);
        System.out.println("뺄셈 결과: " + difference);
        System.out.println("곱셈 결과: " + product);
        if (!Double.isNaN(quotient)) {
            System.out.println("나눗셈 결과: " + quotient);
        }

        sc.close();
	}

}

 

첫번째 숫자를 입력하세요 >>
9
두번째 숫자를 입력하세요 >>
3

--- 사칙연산 결과 ---
덧셈 결과: 12
뺄셈 결과: 6
곱셈 결과: 27
나눗셈 결과: 3.0

 

 

package 상속;

public class Person {
	void 말하기( ) {
		System.out.println("말하기");
	}
	void 먹기() {
		System.out.println("먹기");
	}
	void 걷기() {
		System.out.println("걷기");
	}
	void 잠자기() {
		System.out.println("잠자기");
	}

}
package 상속;

public class Professor {
	void 가르치기() {
		System.out.println("가르치기");
	}
	
}
package 상속;

public class Student extends Person {
	void 공부하기() {
		System.out.println("공부하기");
		/*
		말하기();
		먹기();
		걷기();
		잠자기();
		*/
	}

}
package 상속;

public class StudentWorker extends Student  {
	void 일하기() {
		System.out.println("일하기");
	}
}
package 상속;

public class PersonEx {
	public static void main(String[] args) {
		//student
		Student student = new Student();
		student.걷기();
		student.공부하기();
		student.말하기();
		student.먹기();
		student.잠자기();
	}

}

package 상속;

class A{
	A(){
		System.out.println("생성자A");
	}A(int x){
		System.out.println("생성자A - 매개변수 있음");
	}
}

class B extends A{
	B(){
		System.out.println("생성자B");
	}B(int x){
		System.out.println("생성자B - 매개변수 있음");
	}
}

class C extends B{
	C(){
		this(100);
		System.out.println("생성자C");
	}C(int x){
		System.out.println("생성자C - 매개변수 있음");
	}
}

public class Ext1_생성자우선순위 {
	public static void main(String[] args) {
		C c1 = new C();
	}
}
생성자A
생성자B
생성자C - 매개변수 있음
생성자C
package 상속;

class A{
	A(){
		System.out.println("생성자A");
	}A(int x){
		System.out.println("생성자A - 매개변수 있음");
	}
}

class B extends A{
	//필드
	int a = 10;
	int b = 100;
	
	B(){
		System.out.println("생성자B");
	}B(int x){
		System.out.println("생성자B - 매개변수 있음");
	}
	
	// 부모의 메서드
	void print () {
		System.out.println("나는 부모의 메소드야");
	}
}

class C extends B{
	
	int a = 5;
	
	C(){
		this(100);
		System.out.println("생성자C");
	}C(int x){
		System.out.println("생성자C - 매개변수 있음");
	}
	//메서드
	void print() {
		System.out.println("나의 필드 a값 : " +this.a); //나의 거 : this
		System.out.println("부모의 필드 a값: "+super.a); //부모 : super ,부모의 필드호출
		super.print(); // 부모의 메소드 호출
	}
	
	void speaker() {
		System.out.println("**************");
		System.out.println("나는 speaker야");
		this.print();
	}
}

public class Ext1_생성자우선순위 {
	public static void main(String[] args) {
		C c1 = new C(); //생성자 우선순위
		c1.print(); //부모의 필드와 메소드를 활용
		c1.speaker();
	}
}
생성자A
생성자B
생성자C - 매개변수 있음
생성자C
나의 필드 a값 : 5
부모의 필드 a값: 10
나는 부모의 메소드야
**************
나는 speaker야
나의 필드 a값 : 5
부모의 필드 a값: 10
나는 부모의 메소드야
package 상속;

class Human {
	String name;
	String id;
	
	Human(String name){
		this.name = name;
	}
	
	void print() {
		System.out.println("부모클래스의 print메소드");
	}	
}

class Student1 extends Human{
	String grade;
	Student1( String name) {
		super(name); // 부모의 생성자에 값을 넘겨줘서 초기화
	}
	
	void speaker() {
		System.out.println("자식클래스의 print메소드");
	}
}

public class Ext2_업캐스팅다운캐스팅 {
	public static void main(String[] args) {
		//객체생성
		Student1 st = new Student1("홍길동");
		st.print(); //부모메서드
		st.speaker(); // 자식메서드
		
		//부모타입으로 형변환 - 업캐스팅
		Human p;
		Student1 st2 = new Student1("김길동");
		p = st2; // 업캐스팅
		
		//다른방식 업캐스팅 - 업캐스팅을 하면 자식것에 접근할 수 없다.
		// 부모 = 자식
		Human p2 = new Student1("강감찬");
		p2.print(); //부모
		//p2.speaker() //자식
		
		//다운캐스팅
		Student1 st3 = (Student1)p2;
		st3.print();   //부모
		st3.speaker(); //자식
	}
}
부모클래스의 print메소드
자식클래스의 print메소드
부모클래스의 print메소드
부모클래스의 print메소드
자식클래스의 print메소드
LIST