## 19. 다형성을 이용하여 범용으로 사용할 수 있는 목록 클래스 만들기
- equals() 메서드와 오버라이딩 활용
- Object 클래스와 상속
- Member와 Board 클래스에 적용
- 오버로딩을 활용하여 생성자를 추가
- Member와 Board 클래스 적용
- MemberHandler와 BoardHandler에 적용
Member 클래스에서 equals() 메서드를 Overriding한 상태
equals() 메서드와 오버라이딩 활용
ㄴ Object 클래스와 상속
ArrayList.java
ㄴ Object 클래스 이용하여 Member, Board, Item 클래스에 적용
ArrayList.java
ㄴ members 우클릭 > Refactor > Rename... 선택하여 members 를 모두 list 로 변경
=>
ArrayList.java
ㄴ add 메서드의 파라미터 값으로 Object 타입의 객체를 받도록 함
=>
ArrayList.java
ArrayList.java
ㄴ Member -> Object 로 변경
ArrayList.java
ㄴ Member -> Object 로 변경
ㄴ 파라미터 값도 Object 타입으로 변경
ㄴ m -> item 으로 변경
ㄴ m.getNo() == no -> item.equals(obj) 로 변경
ArrayList.java
ㄴ delete(int no) -> delete(Object obj) 로 변경
ㄴ no -> obj 로 변경
ArrayList.java
ㄴ Member -> Object 로 변경
ㄴ 파라미터 값도 Object 타입으로 변경
ㄴ m -> item 으로 변경
ㄴ m.getNo() == no -> item.equals(obj) 로 변경
오버로딩을 활용하여 생성자를 추가
Member.java
ㄴ Member() 생성자가 있지만, 파라미터가 다른 Member(int no) 생성자를 생성할 수 있음
=> 생성자 오버로딩(overloading)
오버라이딩 한 equals() 와 오버로딩하여 추가한 생성자에 관련하여 MemberHandler 와 BoardHandler에 적용
MemberHandler.java
ㄴ ArrayList 를 이용하기 위해
=> MemberHandler 클래스의 인스턴스가 생성될 때마다 새로운 ArrayList 객체가 생성되고, 이 객체를 list 변수로 참조할 수 있음
Overloading 테스트
Calculator2.java
ㄴ Test3.java 생성
Test3.java
=>
Calculator2.java
Test.java
ㄴ minus(int a, int b) 와 minus2(int a, int b, int c) 로 메서드명을 다르게 생성할 필요가 없음
ㄴ minus(int a, intb) 와 minus(int a, int b, intc) 로 메서드명을 동일하게 부여하여 통일성 있게, 일관되게 사용하도록 할 수 있음
Test3.java
ㄴ 상속 받은 클래스의 메서드와 같은 기능을 수행하는 메서드에 대해서도 오버로딩 가능
오버로딩하여 추가한 생성자에 관련하여 MemberHandler 와 BoardHandler에 적용
MemberHandler.java
ㄴ Member[] -> Object[] 로 변경
ㄴ Object 타입의 obj 를 기존의 m 레퍼런스변수로 받기위해 obj 를 Member 타입으로 형변환
MemberHandler.java
ㄴ Member 타입의 temp 레퍼런스 변수를 통해 Member(int no) 생성자를 호출하도록 만들어줌
ㄴ this.list.get(memberNo) 의 리턴 타입이 Object[] 타입이므로 비교를 위해 Member 타입으로 형변환을 해줌
=>
MemberHandler.java
ㄴ Member 타입으로 형변환을 해준 상태
ㄴ 이를 리팩토링하면 아래와 같음
=>
MemberHandler.java
ㄴ 리팩토링 결과
ㄴ Member 타입의 temp 레퍼런스 변수를 통해 Member(int no) 생성자를 호출하도록 만들어줌
ㄴ this.list.get(memberNo) 의 리턴 타입이 Object[] 타입이므로 비교를 위해 Member 타입으로 형변환을 해준 후 리팩토링
=>
MemberHandler.java
ㄴ 리팩토링까지 완료한 결과
MemberHandler.java
ㄴ 리팩토링 필요
=>
ㄴ 리팩토링 결과
=> BoardHandler 클래스와 ItemHandler 클래스도 동일하게 적용하면 됨
ㄴ 그 후 MemberLsit 클래스와 BoardList 클래스, ItemList 클래스 제거
기억할 것
오버라이딩(Overriding)
ㄴ 상속받은 메서드를 서브 클래스의 역할에 맞게 재정의하는 문법
오버로딩(Overloading)
ㄴ 파라미터가 다르더라도 같은 기능을 하는 메서드에 대해서 같은 이름을 부여하여 통일성 있게, 일관되게 사용할 수 있게 해주는 문법