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 : 폴리몰피즘 ) 정의 : 변수는 데이터형을 갖는다. 따라서 저장할 데이터의 데이터를 알고 있다. 예> 데이터형 변수명; 하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력. - 기본형 형태 큰 타입 = 작은 타입; 예> Employee e = new Manager(); // 다형성 Employee e = new Manager(); 용도 : 하나의 변수로 재사용하자. 2. 다형성의 적용 형태 가. 배열 Object[] obj = new object[10]; 나. 메소드 인자 1) Employee : taxEmployee(){10%} 2) 오버라이딩 3) 부모 클래스에 모두 구현하고 자식은 그냥 사용. 예> public void xxx( long i ) { } 3. 다형성의 메소드 호출 Shape s = new Rectangle(10,10); //다형성 * 동적 바인딩 발생 4. 원래 타입 식별? : instanceof 연산자 사용 예> 5. 메소드의 인자로 데이터를 넘기는 방법 => 자바는 call by value 나. 참조형을 인자로 넘기면 주소값이 넘어가고 따라서 동일한 주소를 가리키게 된다. 주소를 => call by value reference 다형성? - 대표적으로 2가지 메소드 사용법을 알자 나. equals() 메소드 7.toString() 메소드 => 참조변수에는 위치값이 저장되어 있는데, console창에 출력되기 위해서는 문자열이 변경되어야 한다. => Object의 toString() 메소드 구현은 다음과 같다. 클래스명@16진수 예> Object Stirng Date , Integer, Person 8. equals 메소드 -> Object 의 equals 메소드 구현은 다음과 같다. 예> Object : == 비교 String Person - 참조형 나. equals 메소드 Person p = new Person("곽보근"); System.out.println(p.equals(p2));
예>
short s = 10;
int i = 20; // i에 20 정수값 저장
i = s; // idp short타입 데이터 저장
큰 타입과 작은 타입이 같은 종이라서 가능하다.
작은 타입 = 큰 타입; //에러 발생
-> 작은 타입 = (작은타입) 큰 타입;
- 참조형 형태
e = new Engineer(); // 다형성
e + new Employee(); // 일반적 방법
큰 타입 = 작은 타입;
큰 타입과 작은 타입이 같은 종(상속 관계) 이다.
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.
obj[0] = "홍길동";
obj[1] = new Employee();
obj[2] = 12;
예> Employee
Manager Engineer
=> 세금 구하기
일반 직원 : 10%
관리자 : 20%
엔지니어 15%
Manager: taxManager(){20%}
Engineer: taxEngineer(){15%}
Employee : taxEmployee(){10%}
Manager: taxEmployee(){20%}
Engineer: taxEmployee(){15%}
int x =10;
xxx(x);
short s = 20;
xxx(s);
Employee : taxEmployee(){ //Object 사용 가능
10%
20%
15%
}
Manager :
taxEmployee( new Manager());
Engineer :
taxEngineer( new Engineer());
s.getArea(); // 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
new 한 타입의 메소드를 인식하는 것.
: 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.
가. 기본형을 인자로 넘기면 값이 복사된다. 따라서 받는 곳에서 데이터를 변경해도 원래 데이터는
변경되 지 않는다.
받은 곳에서 데이터를 변경하면 원래 데이터도 변경된다.
1) 상속
2) 다형성ㅇ을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.
6. Object 클래스
- 최상위 클래스이다.
모든 클래스의 부모 클래스이다.
(java.lang.Object 의 모든 구성요소를 모든 클래스가 사용가능하다. )
가. toString() 메소드
=> 문자열로 변경하는 메소드.
=> 자동호출된다.
( 참조변수를 Print 메소드로 출력할때 자동으로 호출된다.)
예> String name = "xxx";
System.out.println
따라서 자동으로 toStirng() 붙는다.
=> 대부분 API가 모두 오버라이딩되어 있다.
@ 대신에 실제갑 출력하게 구현되어 있다.
=> 개발자가 명시적으로 만든 클래스이다.
따라서 @가 나온다.
=> 우리도 오버라이딩 하자
" == " 연산자로 비교되어 있다.
( 위치값 비교가 된다.)
-> 대부분의 API가 모두 오버라이딩되어 있다.
(실제값 비교하게 구현 되어 있다.)
API 실제
* 동등비교
값
가. == 연산자
- 기본형
예> int n =3;
int n2 = 3;
if(n==n2) ==> 실제값 비교
예> Person p = new Person("박보영");
Person p2 = new Person("박보영");
if( p==p2) ==> 위치값 비교, false
따라서 참조형 동등비교는 == 비교하지 말고 equals 메소드로 사용한다.
(정말로 위치값을 비교하는 경우에만 == 사용한다. )
- 참조형
- 실제값의 동등비교시 사용
예>
String name = "박보영";
String name2 = "박보영";
System.out.println(name.equals(name2)); //true
Person p2 = new Person("곽보근");
'프로그래밍 > Java' 카테고리의 다른 글
자바 [JAVA] 8일차 수업 ( 문자열 , 예외처리 ) (0) | 2017.08.19 |
---|---|
자바 [JAVA] 7일차 수업 ( 인터페이스, 추상클래스) (0) | 2017.08.18 |
자바 [JAVA] 5일차 수업 ( Argument로 정수및 문자형 받아오기 ) (0) | 2017.08.18 |
자바 [JAVA] 4일차 수업 (this키워드,패키지,import 문,배열,) (0) | 2017.08.18 |
자바 [JAVA] 3일차 수업 객체,클래스 ,메소드,생성자 (0) | 2017.08.18 |