34일차 java 연산(2023-02-09)

권단비·2023년 2월 9일
0

IT

목록 보기
64/139

[Eclipse 연습]

[계산]
class Friend {
	protected String name;
	protected String phone;
	public Friend(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}

	public void showInfo() {
		System.out.println("이름: " + this.name);
		System.out.println("전화: " + this.phone);
	}
}

class UnivFriend extends Friend {
	protected String major;
	public UnivFriend(String name, String major, String phone) {
		super(name, phone);
		this.major = major;
	}

	@Override
	public void showInfo() {
		super.showInfo();
		System.out.println("전공: " + this.major);
	}
}

class CompFriend extends Friend {
	protected String department;
	public CompFriend(String name, String department, String phone) {
		super(name, phone);
		this.department = department;
	}

	@Override
	public void showInfo() {
		super.showInfo();
		System.out.println("부서: " + this.department);
	}
}

public class Test49 {
	public static void main(String[] args) {
		Friend[] frns = new Friend[10];
		int cnt = 0;

		frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555");
		frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444");
		frns[cnt++] = new CompFriend("YOON", "R&D 1", "02-123-999");
		frns[cnt++] = new CompFriend("PARK", "R&D 2", "02-321-777");

		// 모든 동창 및 동료의 정보 전체 출력
		for (int i = 0; i < cnt; i++) {
			frns[i].showInfo(); // 오버라이딩 한 메소드가 호출된다.
			System.out.println();
		}
	}
}
[결과값]
이름: LEE
전화: 010-333-555
전공: Computer

이름: SEO
전화: 010-222-444
전공: Electronics

이름: YOON
전화: 02-123-999
부서: R&D 1

이름: PARK
전화: 02-321-777
부서: R&D 2

[계산]
import java.util.Scanner;
class Grade {
	private int eng;
	private int math;
	private int kor;

	public Grade(int eng, int math, int kor) {
		this.eng = eng;
		this.math = math;
		this.kor = kor;
	}

	public double getSum() {
		return this.eng + this.math + this.kor;
	}

	public double getAvg() {
		return (this.eng + this.math + this.kor) / 3.0;
	}
}
public class Test49 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		boolean run = true;
		while (run) {
			System.out.print("영어: ");
			int eng = sc.nextInt();

			System.out.print("수학: ");
			int math = sc.nextInt();

			System.out.print("국어: ");
			int kor = sc.nextInt();

			Grade grade = new Grade(eng, math, kor);
			System.out.println("총점: " + grade.getSum());
			System.out.println("평균: " + grade.getAvg());

			System.out.println("계속 하시겠습니꺄? y / n");
			String yOrN = sc.next();
			if (yOrN.equals("y") || yOrN.equals("Y")) {
				continue;
			} else {
				System.out.println("종료입니다.");
				break;
			}
		}
	}
}
[결과값]
영어: 76
수학: 90
국어: 100
총점: 266.0
평균: 88.66666666666667
계속 하시겠습니꺄? y / n
y
영어: 76
수학: 90
국어: 100
총점: 266.0
평균: 88.66666666666667
계속 하시겠습니꺄? y / n
n
종료입니다.

[Object 클래스]

Object = 공통적으로 사용될 만한 함수(11개)를 부모로 올림
스레드 관련 5개 빼고, 오버라이딩 자주 사용하는 3개 - toString / hashCode / equals
부모로 올리면 다형성과 오버라이딩 활용 가능
모든 클래스는 Object를 상속한다.

・Object(11가지)
hashCode()
toString()
equals()
getClass()

-스레드관련
notify()
notifyAll()
wait()
wait(...)

clone()
finalize()
・함수 오버로딩
String.valueOf() : 모든 데이터 타입을 문자열로 바꿔줌
[계산]
class C extends Object {
}
public class Wrapping {
	public static void main(String[] args) {
		C c = new C();
		System.out.println(c);
		// Object에서 호출해온다.
		// public String toString() {
		// return getClass().getName() + "@" + Integer.toHexString(hashCode());
		// toHexString : 16진수로 뿌리는 hasCode() 주소값
	}
}

[클래스와 메소드의 final 선언]

public final class MyLastCls{...}
⇒MyLastCls 클래스는 다른 클래스가 상속할 수 없음

class Simple{public final void func(int n)}
⇒아래의 메소드는 다른 클래스에서 오버라이딩 할 수 없음

[Override]

[계산]
// 1. 컴파일러 알려주는 역할
// 2. 애너테이션 넣든, 안넣든 프로그램에는 기본적으로 영향을 주지 못함
// 3. 1.5 버전부터 지원
// 4. 애너테이션 자체가 하나의 기능(함수역할을 함)이 들어가는 경우가 많음
//	@Override // 애너테이션
//	public String toString() {
//		return "메롱!!"
//
//	}
class ParentAdder {
	public int add(int a, int b) {
		return a + b;
	}
}
class ChildAdder extends ParentAdder {
	// @Override // 개발자가 부모에 있는 함수(똑같은 이름이 있는)를 체크해서 없으면 컴파일 에러를 내라
	// 상속으로 두 클래스에 걸쳐서 형성된 메소드 오버로딩이다.
	// 오버라이딩이 아니기 때문에 컴파일 오류 발생
	public double add(double a, double b) {
		System.out.println("덧셈을 진행합니다.");
		return a + b;
	}
}
public class Override {
	public static void main(String[] args) {
	}
}

[인터페이스]

1. interface = 상수와 + abstract(추상)함수(바디가 없는 함수)
2. interface에는 변수가 올 수 없다.
인터페이스(interface) = 자손이 구현하라. (갑→을이 구현)
2개 이상의 클래스를 상속받을 수 있다.
예시)
class C implements A, B{}
[계산]
//1. interface = 상수와 + abstract(추상)함수(바디가 없는 함수)
//2. interface에는 변수가 올 수 없다.
// 인터페이스(interface) = 자손이 구현하라.
interface Printable {
	void print(String doc); // 추상 메소드 public abstract void print(String doc) 이 생략되어 있다.
}
//인터페이스의 정의! 메소드의 몸체를 갖지 않는다.
//따라서 인스턴스 생성 불가! 참조변수 선언 가능!

class Printer implements Printable { // implements : interface를 구현한다.
	@Override
	public void print(String doc) {
		System.out.println(doc);
	}
}

//인터페이스를 구현하는 클래스!
//구현하는 메소드와 추상 메소드 사이에도 메소드 오버라이딩 관계 성립, 따라서 Override 붙일 수 있음.
public class InterFace {
	public static void main(String[] args) {
		Printable prn = new Printer();
		prn.print("Hello Java");
	}
}
[결과값]
Hello Java

[상속과 구현]

1.자손이 구현가능
2.interface = 표준(강제)
=외주 = 드라이버
[계산]
class Printer implements Printable { // implements : interface를 구현한다.
	@Override
	public void print(String doc) {
		System.out.println(doc);
	}
}
interface ICalculator { // I = interface를 뜻함.
	public abstract int add(int num, int num2);
	public abstract int sub(int num, int num2);
	public abstract int mul(int num, int num2);
	int div(int num, int num2);
}

class MyCalculator implements ICalculator {
	@Override
	public int add(int num, int num2) {
		return num + num2;
	}
	@Override
	public int sub(int num, int num2) {
		return num - num2;
	}
	@Override
	public int mul(int num, int num2) {
		return num * num2;
	}
	@Override
	public int div(int num, int num2) {
		return num / num2;
	}
}
public class InterFace {
	public static void main(String[] args) {
		ICalculator calculator = new MyCalculator();
		System.out.println(calculator.add(10, 20));
		System.out.println(calculator.sub(10, 20));
		System.out.println(calculator.mul(10, 20));
		System.out.println(calculator.div(10, 20));
	}
}
[결과값]
30
-10
200
0

0개의 댓글