728x90
반응형

<오늘의 학습>

1. 추상 클래스

2. 인터페이스

3. 패키지

4. Object 클래스

5. Wrapper 클래스

6. String 객체

7. Math 클래스

 

 

1.  추상클래스

▶ Calculator 코드

public abstract class Calculator {
	public abstract int add(int a, int b);
	public abstract int subtract(int a, int b);
	public abstract double average(int[] a);
}

 

 

▶GoodCalc 코드

public class GoodCalc extends Calculator{
	@Override
	public int add(int a, int b) {
		return a+b;
	}

	@Override
	public int subtract(int a, int b) {
		return a-b;
	}

	@Override
	public double average(int[] a) {
		int sum=0;
		for(int num:a)
			sum+=num;
		
		return (sum/a.length);
	}
}
  • 추상클래스는 서브 클래스에서 재정의(오버라이딩) 해야 오류가 나지 않는다.

 

 

 

2.  인터페이스 작성

  • 인터페이스 Calc 작성
  • 메소드명:Add, Sub, Mul, Div
  • 리턴:int
  • 매개변수(파라미터):int 값 두 개
  • 인터페이스를 상속받는 클래스를 작성하여 출력

 

▷ 예제

▶ Calc 코드

public interface Calc {
	int Add(int a, int b);
	int Sub(int a, int b);
	int Mul(int a, int b);
	int Div(int a, int b);
}

 

▶ CalcClass 코드

public class CalcClass implements Calc{
	@Override
	public int Add(int a, int b) {
		return a+b;
	}

	@Override
	public int Sub(int a, int b) {
		return a-b;
	}

	@Override
	public int Mul(int a, int b) {
		return a*b;
	}

	@Override
	public int Div(int a, int b) {
		return a/b;
	}
}

※ 곱셈과 나눗셈은 0 값에 대한 예외 처리가 필요하다.
ex) try{
       }catch (Exception e){
                 System.out.println("0 값이 입력되었습니다.");
       }

 

▶ main 코드

public interface Calc {
	int Add(int a, int b);
	int Sub(int a, int b);
	int Mul(int a, int b);
	int Div(int a, int b);
}

 

▶ 출력 결과

덧셈:15
뺄셈:5
곱셈:50
나눗셈:2

 

 

 

인터페이스 실습 내용

 

[JAVA] 인터페이스의 추상 메소드를 구현한 클래스 작성하기

문제 public interface ArrayInterface { //int array[]={3,5,2,4,1}; //배열의 가장 큰 값과 작은 값의 차이 int MaxSubMin(int[] a); //배열의 가장 큰 값을 맨 마지막 값과 위치 바꾸기 void MaxChange(int[] a); } 인터페이스 Ar

deliciouscode.tistory.com

 

 

 

 

다음 학습

 

[JAVA] 패키지와 Object 클래스 (15일차)

 

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

문제1

아래의 Fruit 클래스와 main를이용해 Banana, Orange, Apple 클래스를 작성하라.

  • Fruit 클래스 상속 받아 Banana, Orange, Apple 클래스 생성
  • 3개의 클래스는 int형 price 변수를 가지며, 생성자를 통해 초기화
  • main 에서 다음 과정을 통해 객체 생성
  • Banana banana = new Banana ("바나나", "노란색", 1000);
  • Orange orange = new Orange ("오렌지", "주황색", 2000);
  • Apple apple = new Apple ("사과", "빨간색", 1500);

 

 

▶ Banana 코드

public class Orange extends Fruit{
	private int price;
	
	Orange(String name, String color, int price){
		super(name, color);
		this.price=price;
	}

	public int getPrice() {
		return price;
	}
	public void SetPrice(int price){
		this.price=price;
	}
}

 

 

▶ Orange 코드

public class Orange extends Fruit{
	private int price;
	
	Orange(String name, String color, int price){
		super(name, color);
		this.price=price;
	}

	public int getPrice() {
		return price;
	}
	public void SetPrice(int price){
		this.price=price;
	}
}

 

 

▶ Apple 코드

public class Apple extends Fruit{
	private int price;
	
	Apple(String name, String color, int price){
		super(name, color);
		this.price=price;
	}

	public int getPrice() {
		return price;
	}
	public void SetPrice(int price){
		this.price=price;
	}
}

 

 

 

문제2

main문에 이름을 출력하는 pack()을 만들어 아래 내용을 출력하시오. 업캐스팅을 이용하시오.

바나나를 담았습니다.
오렌지를 담았습니다.
사과를 담았습니다.

 

 

▶ main 코드

	static void pack(Fruit fruit){
		System.out.println(fruit.getName()+"를 담았습니다.");
	}//슈퍼클래스인 Fruit 타입으로 업캐스팅
	
	public static void main(String[] args) {
		Banana banana = new Banana("바나나","노란색",1000); //바나나 객체
		Orange orange = new Orange("오렌지","주황색",1500); //오렌지 객체
		Apple apple = new Apple("사과","빨간색",2000); //사과 객체
		
		pack(banana);
		pack(orange);
		pack(apple);
	}//main_end

 

 

▶ 출력 결과

바나나를 담았습니다.
오렌지를 담았습니다.
사과를 담았습니다.

 

 

 

문제3

main문에 금액과 이름을 출력하는 pack()을 만들어 아래 내용을 출력하시오. instanceof와 다운캐스팅을 이용하시오.

1000원짜리 바나나를 담았습니다.
1500원짜리 오렌지를 담았습니다.
2000원짜리 사과를 담았습니다.

 

 

▶ pack 코드

※ fruit.getPrice();업캐스팅했기 때문에 바로 접근할 수 없다. 다운캐스팅을 이용하면 fruit.getPrice()에 접근이 가능하다.

	static void pack(Fruit fruit){ //슈퍼클래스인 Fruit 타입으로 업캐스팅
		int price=0;
		if(fruit instanceof Banana) //fruit가 Banana 타입이면 true
			price =((Banana)fruit).getPrice(); //다운캐스팅
		else if(fruit instanceof Orange)
			price =((Orange)fruit).getPrice();
		else if(fruit instanceof Apple)
			price =((Apple)fruit).getPrice();
		
		System.out.println(price+"원짜리 "+fruit.getName()+"를 담았습니다.");
	}
  •  if문 안에 instanceof를 작성하여 어떤 객체인지 확인한다.
  • 조건문이 객체와 일치하여 true(참)가 되면 조건문 안의 내용이 실행된다.

 

 

▶ 출력 결과

1000원짜리 바나나를 담았습니다.
1500원짜리 오렌지를 담았습니다.
2000원짜리 사과를 담았습니다.

 

 

 

문제4

fruit 클래스에 view 메소드를 정의하고, Banana 클래스에서 오버라이딩을 이용해 재정의하여 아래 내용을 출력하시오.

	void view(){
		System.out.println("종류:"+name+",색:"+color);
	}

결과:원숭이가 좋아하는 바나나=>종류:바나나,색:노란색

 

 

▶ Banana  코드

	void view(){
		System.out.print("원숭이가 좋아하는 바나나=>");
		super.view();//부모클래스의 view() 호출
	}//오버라이딩(재정의)

 

 

▶ main  코드

		banana.view();

 

 

728x90
반응형
728x90
반응형

문제1

 

 

▶  Won2Dollar 코드

import java.util.Scanner;

public class Won2Dollar {
	private int dollar;
	
	Won2Dollar (int dollar){
		this.dollar=dollar;
	}
	
	void run(){
		Scanner scan = new Scanner(System.in);
		System.out.println("원을 달러로 바꿉니다.");
		System.out.print("원을 입력하세요>> ");
		int won = scan.nextInt();
		
		double wonDollar = won/dollar;
		System.out.println("반환 결과 "+wonDollar+"달러입니다");
		
		scan.close();
	}
}

 

▶ 출력 결과

원을 달러로 바꿉니다.
원을 입력하세요>> 24000
반환 결과 20.0달러입니다

 

 

 

 

문제2

 

 

▶ Km2Mile 코드

import java.util.Scanner;

public class Km2Mile {
	private double mile;

	Km2Mile (double mile){
		this.mile=mile;
	}

	void run(){
		Scanner scan = new Scanner(System.in);
		System.out.println("Km을 mile로 바꿉니다.");
		System.out.print("Km을 입력하세요>> ");
		int km = scan.nextInt();
		
		double kmMile = km/mile;
		System.out.println("반환 결과 "+kmMile+"mile입니다");
		
		scan.close();
	}
}

 

▶ 출력 결과

Km을 mile로 바꿉니다.
Km을 입력하세요>> 30
반환 결과 18.75mile입니다

 

 

 

 

문제3

 

[JAVA] 과일 예제 (업캐스팅/다운캐스팅)

문제1 아래의 Fruit 클래스와 main를이용해 Banana, Orange, Apple 클래스를 작성하라. Fruit 클래스 상속 받아 Banana, Orange, Apple 클래스 생성 3개의 클래스는 int형 price 변수를 가지며, 생성자를 통해 초기화

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 업캐스팅

2. 다운캐스팅

3. instanceof

4. 오버라이딩

5. 오버로딩

6. 연결 리스트 (Linked list)

 

 

4.  오버라이딩 (재정의)

  • 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구현하는 기능이다.
  • 상속을 통해 객체 지향의 다형성을 실현한다. (하나의 인터페이스(같은 이름)에 서로 다른 내용 구현)
  • 오버라이딩은 동적 바인딩을 통해 실행 중에 다형성을 실현한다.
  • 예를 들어, 같은 draw()라는 이름의 메소드도 Circle 클래스의 draw()는 원을 그리고 Rect 클래스의 draw()는 사각형 그린다.

※ 동적 바인딩 : 실행할 메소드를 실행 시에 결정하며 오버라이딩 메소드가 항상 호출된다.

 

 

▶ 메소드 오버라이딩

  • 메소드 오버라이딩 : 슈퍼 클래스의 메소드를 서브 클래스에서 재정의하는 것
  • 슈퍼 클래스 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모 든 것 동일하게 작성해야 한다.
  • 메소드 무시하기, 덮어쓰기로 번역되기도 한다.
  • 동적 바인딩 발생 : 서브 클래스에 오버라이딩된 메소드가 무조건 실행된다.

 

 

 

5.  오버로딩

  • 같은 클래스나 상속 관계에서 동일한 이름의 메소드를 중복 작성하는 것이다.
  • 오버로딩은 컴파일 타임 다형성 실현

 

▶ 오버라이딩과 오버로딩의 비교

  메소드 오버로딩 메소드 오버라이딩
선언 같은 클래스나 상속 관계에서 동일한 이름의 메소드를 중복으로 작성 서브 클래스에서 슈퍼 클래스에 있는 메소드와 동일한 이름의 메소드 재작성(재정의)
관계 동일한 클래스 내 or 상속 관계 상속 관계
목적 이름이 같은 여러 개의 메소드를 중복으로 작성하여 사용의 편리성을 향상시키고, 다형성을 실현시키기 위함이다. 슈퍼 클래스에 구현된 메소드를 무시하고 서브 클래스에서 새로운 기능의 메소드를 재정의하고, 다형성을 실현시키기 위함이다.
조건 메소드 이름은 반드시 동일해야 하고, 매개변수의 타입이나 개수가 달라야 성립된다. 메소드의 이름, 매개변수 타입, 개수, 리턴 타입이 모두 동일해야 성립된다.
바인딩 정적 바인딩. 호출될 메소드는 컴파일 시에 결정된다. 동적 바인딩. 실행 시간에 오버라이딩 된 메소드를 찾아서 호출한다.

 

 

 

6.  연결 리스트 (Linked list)

  • 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조.
  • 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 다음 노드와의 연결을 담당한다.
  • 배열 중간에 데이터를 추가하거나 삭제할 때 전체의 인덱스가 뒤로 밀리거나 당겨지는 현상이 일어나는데, 연결 리스트는 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않아 데이터의 추가와 삭제가 용이하다.

 

 

 

 


2023년 6월 1일 목요일

<14일차 수업 후기>

오버라이딩과 오버로딩은 의미는 비슷하지 않지만 이름이 비슷해서 가끔 헷갈렸다.

오늘 수업으로 오버라이딩은 재정의, 오버로딩은 생성자라는 특징을 외우니까 잘 외울 수 있었다. 오늘 이후로는 헷갈리지 않을 것 같다.

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 업캐스팅

2. 다운캐스팅

3. instanceof

4. 오버라이딩

5. 오버로딩

6. 연결 리스트 (Linked list)

 

 

1.  업캐스팅

  • 서브 클래스 객체를 슈퍼 클래스 타입으로 타입 변환하는 것
  • 업캐스팅된 레퍼런스는 객체 내에 슈퍼 클래스의 멤버만 접근이 가능하다.
class Person {...}
class Student extends Person {...}

Student s = new Student();
Person p = s;//업캐스팅 자동타입 변환
Person p = new Student();//업캐스팅
  • 레퍼런스 p를 이용하면 Student 객체의 멤버 중 Person의 멤버에만 접근이 가능하다.

 

 

 

2.  다운캐스팅

  • 슈퍼 클래스 객체를 서브 클래스 타입으로 변환하는 것
  • 개발자의 명시적 타입 변환 표시가 필요하다.
		class Person {...}
		class Student extends Person {...}
	
		Person p = new Student();//업캐스팅
		Student s;
		s = (Student)p; //다운캐스팅

 

 

 

3.  instanceof

  • 레퍼런스가 가리키는 객체의 타입 식별을 위해 사용한다. 슈퍼 클래스는 여러 서브 클래스에 상속되기 때문에 업캐스팅된 레퍼런스로 객체의 타입을 판단하는 것이 어렵기 때문이다.
  • 사용 : 객체 레퍼런스 instanceof 클래스타입
  • 연산의 결과는 true와 false의 boolean 값으로 나온다.

 

 

 

실습 내용

 

[JAVA] 과일 예제 (업캐스팅/다운캐스팅)

문제1 아래의 Fruit 클래스와 main를이용해 Banana, Orange, Apple 클래스를 작성하라. Fruit 클래스 상속 받아 Banana, Orange, Apple 클래스 생성 3개의 클래스는 int형 price 변수를 가지며, 생성자를 통해 초기화

deliciouscode.tistory.com

 

 

 

 

다음 학습

 

[JAVA] 오버라이딩과 오버로딩, 연결 리스트 (14일차)

1. 업캐스팅 2. 다운캐스팅 3. instanceof 4. 오버라이딩 5. 오버로딩 6. 연결 리스트 (Linked list) 4. 오버라이딩 (재정의) 슈퍼 클래스에 선언된 메소드를, 각 서브 클래스들이 자신만의 내용으로 새로 구

deliciouscode.tistory.com

 

728x90
반응형

+ Recent posts