6일차 수업 (다형성)

1. 다형성( polymorphism )

정의 : 하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

 

이런식으로 사용 ->  데이터형 변수명;

 

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

나. 메소드 인자

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.  

 

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

 

4. 원래 타입 식별

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

 

<다형성 최종 정리>

1) 상속
2) 다형성을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.

 

6. Object 클래스

7.toString() 메소드

 

<배운것>

Eclipse 에서 Argument 에서 문자열or숫자를 입력 받는다.

public static void main(String[] args) {

 

String a = args[*]; //그냥 문자열을 받아와 a에 저장 배열처럼 이용

double salay = Double.parseDouble(args[0]); //double 형으로 받아와 salay에 저장

 

}

에서 Argument 에서 args를 말하는 것!

먼저 .java 클릭후에 마우스 오른쪽 버튼을 누르고 run as -> run cofi....클릭

Argument 의 String prompt 클릭하고 적용

 

수업노트 ==========

1. 다형성( polymorphism : 폴리몰피즘 )

정의 : 변수는 데이터형을 갖는다. 따라서 저장할 데이터의 데이터를 알고 있다.

예> 데이터형 변수명;

    하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

- 기본형 형태
예>
 short s = 10;
 int i = 20;  // i에 20 정수값 저장
     i = s;   // idp short타입 데이터 저장

 큰 타입 = 작은 타입;
 큰 타입과 작은 타입이 같은 종이라서 가능하다.
 작은 타입 = 큰 타입; //에러 발생
 -> 작은 타입 = (작은타입) 큰 타입;
- 참조형 형태

예> Employee e = new Manager();   // 다형성
      e = new Engineer();  // 다형성
      e + new Employee();  // 일반적 방법

    Employee e = new Manager();
    큰 타입 = 작은 타입;
    큰 타입과 작은 타입이 같은 종(상속 관계) 이다.

용도 : 하나의 변수로 재사용하자.

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

Object[] obj = new object[10];
obj[0] = "홍길동";
obj[1] = new Employee();
obj[2] = 12;

나. 메소드 인자
예>      Employee
Manager      Engineer
=> 세금 구하기
   일반 직원 : 10%
   관리자 : 20%
   엔지니어 15%

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.

예> public void xxx( long i ) { }
 int x =10;
 xxx(x);
 short s = 20;
 xxx(s);


   Employee : taxEmployee(){ //Object 사용 가능
  10%
  20%
  15%
  }
   Manager :
  taxEmployee( new Manager());
   Engineer :
  taxEngineer( new Engineer());

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

4. 원래 타입 식별?

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

예>

5. 메소드의 인자로 데이터를 넘기는 방법

=> 자바는 call by value
가. 기본형을 인자로 넘기면 값이 복사된다. 따라서 받는 곳에서 데이터를 변경해도 원래 데이터는
    변경되 지 않는다.

나. 참조형을 인자로 넘기면 주소값이 넘어가고 따라서 동일한 주소를 가리키게 된다. 주소를
    받은 곳에서 데이터를 변경하면 원래 데이터도 변경된다.

=> call by value reference

다형성?
1) 상속
2) 다형성ㅇ을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.


6. Object 클래스
- 최상위 클래스이다.
모든 클래스의 부모 클래스이다.
(java.lang.Object 의 모든 구성요소를 모든 클래스가 사용가능하다. )

- 대표적으로 2가지 메소드 사용법을 알자
가. toString() 메소드

나. equals() 메소드

7.toString() 메소드
=> 문자열로 변경하는 메소드.
=> 자동호출된다.
( 참조변수를 Print 메소드로 출력할때 자동으로 호출된다.)
예> String name = "xxx";
    System.out.println

=> 참조변수에는 위치값이 저장되어 있는데, console창에 출력되기 위해서는 문자열이 변경되어야 한다.
따라서 자동으로 toStirng() 붙는다.

=> Object의 toString() 메소드 구현은 다음과 같다.

  클래스명@16진수

예>  Object

Stirng    Date , Integer,
=> 대부분 API가 모두 오버라이딩되어 있다.
@ 대신에 실제갑 출력하게 구현되어 있다.

Person
=> 개발자가 명시적으로 만든 클래스이다.
따라서 @가 나온다.
=> 우리도 오버라이딩 하자

8. equals 메소드

-> Object 의 equals 메소드 구현은 다음과 같다.
  " ==  " 연산자로 비교되어 있다.
  ( 위치값 비교가 된다.)

예> Object : == 비교

String
 -> 대부분의 API가 모두 오버라이딩되어 있다. 
(실제값 비교하게 구현 되어 있다.)

Person
API 실제
* 동등비교

가. == 연산자
- 기본형
예> int n =3;
    int n2 = 3;
    if(n==n2) ==> 실제값 비교

- 참조형
예> Person p = new Person("박보영");
    Person p2 = new Person("박보영");
    if( p==p2) ==> 위치값 비교, false
따라서 참조형 동등비교는 == 비교하지 말고 equals 메소드로 사용한다.
(정말로 위치값을 비교하는 경우에만 == 사용한다. )

나. equals 메소드
- 참조형
- 실제값의 동등비교시 사용
예>
 String name = "박보영";
 String name2 = "박보영";
 System.out.println(name.equals(name2)); //true

 Person p = new Person("곽보근");
 Person p2 = new Person("곽보근");

 System.out.println(p.equals(p2));

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,