。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-36일차(6월15일)] - 웹프로그래밍 17일차

quarrrter 2023. 6. 15. 19:55

Handler에게 메뉴 기능 위임 

여기서부터

 

1번을 누르면 memberHandler.excute 실행
memberHandler.excute

jdk 가 디버깅 모드 실행함 

break point 설정하고 디버깅 켜기. 어떻게 하는 지 잘 모르겠음

일반 모드에서는 break point 무시됨. 디버그 모드에서만 실행함 

돌아가기

 

 

MEMBERHANDLER 에게 메뉴 기능을 위임 하는데 ,, ,! 

 

문제점 : 

Handler 클래스를 작성하고 개발자가 어떤 이름으로 메서드를 만드느냐에 따라 App에게 호출하는 코드가 달라진다. 

=> 개발자가 같은 이름으로 메서드를 만들면 되는것이 아닌가,,/?

=>강제성이 없어 개발자의 선의에 기댈 수 밖에 없다 . 

=> 엔지니어링 공학세계에서 선의에 기대는 것은 의미가 없다 . ..

=> 클래스 사용법을 특정방식으로 강제할 수 있는 문법이 필요하다. 

=> 인터페이스 (Interface) 규칙 :객체사용규칙을 정하는 문법(여기서의 객체: 클래스) (객체는 클래스(메서드묶음), 인스턴스, 메서드 모두 될 수 있음. 문맥에 따라 판단해야함)

-클래스 사용 규격 

 

인터페이스의 이점

- 구현의 일관성, 통일성 

- 사용의 일관성 

=> 대체가 쉽다. 

 

17. Handler의 사용 규칙을 인터페이스로 정하기 

+퍼블릭은 안 적어두 기본이 퍼블릭임 

점점점점은 점 화살표가 가르키는 규칙을 사용한다는 뜻
인터페이스 Handler (new file 만들때 인터페이스로 만들기) //  pulic을 빼도 기본이 public임
Handler 인터페이스 규칙에 따라 MemeberHandler class를 만듬 // 여기선 public 빼면 안됨.
난 어떤 개발자가 될까,,?  내가 어떤 일을 해야할지 판단하고 개발을 해야함.(저 점점점은 저 규칙을 사용한다는 뜻)
ㅎㄷㄷ 인터페이스를 앞에 써도 됨.

핸들러에 정의 되지 않은 메서드는 위에 핸들러로 만든 new 인스턴스에 쓸 수 없다. 

이렇게 어디에 속한건지 따로 써주면 가능함.

 

인스턴스 목록을 다루는 코드를 별도의 클래스로 분리 

MemberHandler : 사용자 ui & 인스턴스 보관 두개의 역할을 하는 중이기때문에 ,,, 

업무를 더 전문화시켜서 분리 => 재사용성이 좋아짐.

아래 두개로 분리. 핸들러가 list를 사용하도록 설정. 

1.MemberHandler : 사용자 UI 

2. MemberList : 인스턴스 보관 코드를 별도의 클래스로 분리(encapsulation)              

encapsulation

(클래스로 분리한다 = 보관 방법을 감춘다. )

 =>멤버핸들러는 보관방법을 알 필요가 없음, => 보관방법을 쉽게 변경할 수 있다. => 코드 변경이 쉽다. = >유지보수가 쉽다. 다른 프로젝트에서 재사용하기가 쉽다! 

컴포지션 관계. 리스트를 핸들러가 만듬. 핸들러가 사라지면 리스트도 사라짐.

foreach 배열의 처음부터 끝까지 반봅 

for(int i = 0; i < arr.length; i++)

for (Member m : arr)

 


  private void increase() {
	  //기존 배열보다 50% 큰 배열을 새로 만든다. 
      Board[] arr = new Board[boards.length+(boards.length >> 1)]; // 나누기 2 = >> 1
      
      //기존 배열의 값을 새 배열로 복사한다. 
      for(int i = 0; i < boards.length; i++) {
    	  arr[i] = boards[i];
	  
  }
      // boards 레퍼런스가 새 배열을 가리키도록 한다. 
      boards = arr; 
  	//System.out.println("배열확장:  " + boards.length);
      
  }
  
  //복제해서 담아서 리턴
  public Member[] list() {
	  //리턴할 값을 담을 배열 생성
	  Member[] arr = new Member[this.length];
	  
	  //원본 배열에서 입력된 인스턴스 주소를 꺼내 새 배열에 담는다.
	  for (int i = 0; i < this.length; i++) {
	      arr[i] = this.members[i];
	    }
	  
	  //새 배열을 리턴한다.
	  return arr;
  }
  
  public Member get(int no) {
	  for (int i = 0; i < this.length; i++) {
	      Member m = this.members[i];
	      if (m.getNo() == no) {     
	        return m;
	      }
	    }
	  return null;
  }

생성된 배열은 늘릴 수 없음 

새로 만들어서 복사해야됨