본문 바로가기
백엔드/Java

<FAST CAMPUS>자바 웹개발-객체지향 프로그래밍

by 고구마는호박고구마 2021. 1. 23.

<객체지향 프로그래밍 53장~57장>

 

 Set 인터페이스 - 1

      

          Set 인터페이스의 정의

                - 순서대로 저장되지 않는다 -> iterator () 메서드로 호출 

                - Collection 하위의 인터페이스

                - 중복을 허용하지 않음

                - get(i) 메서드가 제공되지 않음 ( Iterator로 순회 )

                - 저장된 순서와 출력순서는 다를 수 있음

                - 아이디, 주민번호, 사본 등 유일한 값이나 객체를 관리할 때 사용

                - HashSet, TreeSet 클래스 

 

 

            HashSet 클래스 ( Set 인터페이스 구현 클래스 ) 

         

순서대로 출력 X -> (랜덤) ,  중복이 허용이 안된다. 
Hash를 순회 할때 사용 

 

           Hash셋 으로 멤버관리

 

                               MemberHashSet 클래스 

해쉬셋을 멤버클래스로 설정하고 멤버를 추가하는 메서드 설정, 멤버를 지우는 메서드는 멤버 id를 받으면 순회를 해서 찾아야 하기 때문에 Iterator를 선언해주고 순회를 하면서 if 문으로 지우려는 id 와 일치하면 remove 함수로 멤버를 지운다.  모든 멤버들을 출력하는 메서드에는 Iterator을 선언해도 되고 inhenced fon문 ( 향상된 폴문 ) 으로 돌아서 멤버들을 확인해 줍니다.

                                

                             MemberHashSetTest ( 구현 ) 

테스트 클래스에서 멤버클래스들을 관리할 매니저를 선언해주고 멤버들을 생성하고 멤버를 추가 그리고 지우는 작업을 하였으며 . 결과는 랜덤으로 추가가 되고 100번 id 멤버가 지워진걸 확인할 수 있었습니다.

 

                         같은 아이디로 멤버를 선언하였을 때

 

분명 String에서는 중복이 허용이 안되었는데 여기선 중복이 허용이 된걸 확인이 된다. 그이유는 Member의 정의에서 id 끼리 같다라는게 정의가 안되 있기 때문이다. 

 

                          Member 클래스 equals 메서드 재정의

id가 같을데 같은것으로 정의를 하였다.  그럼 결과가 중복이 안되는걸 확인할 수 있다. 

 Set 인터페이스 - 2

 

              TreeSet 클래스

                    - 객체의 정렬에 사용되는 클래스

                    - 중복을 허용하지 않으면서 오름차순이나 내림차순으로 객체를 정렬 함

                    - 내부적으로 이진 검색 트리로 구현되어 있음

                    - 이진 검색 트리에 자료가 저장 될 때 비교하여 저장될 위치를 정함

                    - 객체 비교를 위해 Comparable 이나 Comparator 인터페이스를 구현 해야 함

 

 

가나다 순으로 정렬된걸 확인 가능 -> String에 Comparable 이 정의되어 있기 때문  

 

                      TreeSet 클래스로 멤버클래스의 멤버들을 정렬해보자 

오류가 나오는 이유는 비교 대상이 정해져 있지 않기 때문이다. ( String 은 가나다, abc 순으로 정해져 있음 but Member 클래스는 정의를 안해놨기 때문) 

 

                     비교대상 설정

implements 로 Comparable<Member> 를 포함시키고 비교할 것을 정의 한다. 자기 자신과 매개변수로 온 멤버를 비교하며 자기 자신이 더 크면 양수가 리턴되고 작으면 음수가 리턴되어 정렬이 된다. (역순으로 정렬하고 싶으면 리턴에 *(-1) 을 한다. ) 

 

 

 Map 인터페이스 ( 쌍(key, value)으로 구현된 자료구조 , 컬렉션 인터페이스는 하나의                               자료구조 ) 

 

 

 

                      HashMap 클래스 ( 가장많이 사용 )

                        -HashTable 클래스는 자바2 부터 제공된 클래스로 Vector 처럼 동기화를 제공 함

                        -pair 자료를 쉽고 빠르게 관리할 수 있음

 

 

력->렬

  

 

쌍으로 구현된 자료구조 인트와 멤버를 선언하고 멤버를 추가할때는 add가 아닌 put으로 추가가 된다. 제거 할때는 containsKey 라는 함수를 사용하여 찾으려 하는 멤버를 찾을수 있고  겟함수를 통해 멤버들을 확인 할 수 있다.

 

 

                     TreeMap 클래스 ( TreeSet 과 비슷 ) 

 

 

 

 

 전체적인 틀

 

          

 

12장 ( 내부클래스, 람다식, 스트림 )

 

내부 클래스

  

    - 클래스 내부에 구현한 클래스 (중첩된 클래스)

    - 클래스 내부에서 사용하기 위해 선언하고 구현하는 클래스

     (클래스외부에서는 쓰일 일이 없고  클래스 내부에서만 쓸거면 내부 클래스 선언) 

   

익명 내부 클래스를 많이 사용하는 편

        내부 클래스

내부 클래스는 아웃클래스가 생성이 되야지 호출이 가능하다. 내부클래스 안에서는 스태틱으로 변수 선언 불가능 . (  내부 클래스 자체가 외부가 선언이 되야지 생성되는 클래스이기 때문 ) 

 

     스태틱 내부 클래스

스태틱 내부 클래스는 외부클래스 생성하지 않고도 바로 사용이 가능하다. 

 

    지역 내부 클래스 

아웃클래스 안의 메서드에 다시 클래스가 생성을 하면 또다른 지역이 생긴다고 보면되고 메서드의 넘어온 변수 i, num은 지역 내부 클래스에서 참조는 할 수 있지만 변경은 불가능 하다 . 그 이유는 지역변수의 변수들은 상수가 되기 때문  
getRunnable(50) 을 호출을 하고 끝이 나면 받은 매개변수와 변수 들은 없어지게 된다. run()함수는 언제든지 호출이 가능한데 없어진 값들을 변경한다? 그건 불가능 그래서 지역내부 변수는 final로 지정이되어 상수화가 되서 변경이 안되게 되는것이다.

 

 

익명 내부 클래스 

 

클래스 이름이 의미가 없다 -> Runnable 한 인터페이스 (내부 추상메서드를 오버라이딩 필수) 를 바로 구현해서 run이 구현이되고 반환을 했다는 의미 (클래스 이름이 없어짐 ) 

댓글