본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 18일차 (2023-06-16) 자바 기초 DAY16_다형성 이용, overloading_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 6. 17.
## 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)

ㄴ 파라미터가 다르더라도 같은 기능을 하는 메서드에 대해서 같은 이름을 부여하여 통일성 있게, 일관되게 사용할 수 있게 해주는 문법