* 디버그 모드 사용법과 기능 설명
디버그 모드필요성 → 버그 식별, 문제 해결, 코드분석 및 최적화, 테스트 지원, 학습 및 이해
브레이크 포인트 설정: 디버깅을 위해 코드의 특정 지점에 브레이크 포인트를 설정
이는 실행 도중에 해당 지점에서 프로그램이 일시 중단되도록 하는 역할
디버그 모드 실행: 설정된 브레이크 포인트가 있는 상태에서 디버그 모드를 실행
디버그 모드에서는 프로그램이 브레이크 포인트에 도달하면 실행이 일시 중단
디버깅 기능 사용:Resume(계속): 디버그 모드에서 프로그램 실행을 재개
실행이 다음 브레이크 포인트에 도달할 때까지 진행
Step Over(건너뛰기): 현재 실행 중인 줄을 건너뛰고 다음 줄로 넘어감
호출된 함수나 메소드는 실행되지 않고 그냥 다음 줄로 이동
Step Into(들어가기): 현재 실행 중인 줄에서 함수나 메소드 호출이 있는 경우,
해당 호출로 진입하여 내부 코드를 디버깅할 수 있음
Step Out(나가기): 현재 실행 중인 함수나 메소드의 실행을 완료한 후, 호출된 곳으로 돌아감
이는 함수나 메소드의 내부 코드를 모두 실행한 후 다음 줄로 이동하는 것을 의미
변수 값 확인: 디버깅 중에 변수의 값을 확인할 수 있음
주로 디버그 도구의 "Watch" 또는 "Variables" 패널을 통해 변수 값을 실시간으로 모니터링할 수 있음
코드 수정: 디버깅 도중에 문제점을 파악하면 해당 코드를 수정할 수 있다
수정한 코드는 디버그 모드에서 다시 실행해보면서 문제가 해결되었는지 확인할 수 있음
Java EE 버튼은 일반적으로 개발자 도구 화면으로 돌아가는 기능을 제공
따라서 디버깅 도구에서 개발자 도구로 전환하거나 다른 개발 작업을 수행할 수 있음.
이를 통해 디버깅 외의 작업을 수행하거나 개발 환경으로 돌아갈 수 있다.
* 16. Handler 에게 메뉴 기능을 위임
App에서 MemberHandler와 BoardHanlder를 호출하여 CRUD를 구성한다.
즉, 기존의 0~15 의 Menu를 사용하는 대신에 첫 화면에서 사용할 메뉴를 선택하게함으로써
캡슐화 및 최적화를 할 수 있다.
* 16-2. 인터페이스 ( Inteface)
인터페이스의 필요성 → 클래스의 사용법을 특정 방식으로 강제할 수 있는 문법이 필요하다.
인터페이스의 필요성
코드 재사용: 인터페이스를 사용하면 다양한 클래스에서 동일한 인터페이스를 구현.
이로써 같은 인터페이스를 구현하는 클래스들은 동일한 메서드를 가지고 있어, 코드의 재사용성이 높아짐
다형성 구현: 인터페이스는 다형성을 구현하는 데에 중요한 역할. 인터페이스 타입으로 변수를 선언하고,
해당 인터페이스를 구현한 다양한 클래스의 인스턴스를 참조할 수 있음.
이를 통해 실행 시에 어떤 클래스의 인스턴스를 사용할지 결정할 수 있고, 유연한 코드 작성이 가능
코드 결합도 낮춤: 인터페이스를 사용하면 클래스 간의 결합도를 낮출 수 있음
클래스는 인터페이스에 정의된 메서드만을 구현하면 되므로, 클래스 간의 의존성을 줄일 수 있음
이로써 코드의 유지 보수성과 확장성을 향상시킬 수 있음
표준화된 개발: 인터페이스는 클래스 간의 상호작용을 규정하기 때문에, 표준화된 개발을 도모할 수 있음
다른 개발자가 동일한 인터페이스를 구현하여 기능을 추가하거나 확장할 수 있으므로,
협업과 유지 보수가 용이함
* 17. Handler 의 사용 규칙을 인터페이스로 정하기
인터페이스의 특징
public: 인터페이스를 정의할 때 public 키워드를 사용하여 외부에서 접근 가능하도록 설정
이는 다른 클래스에서 해당 인터페이스를 구현하거나 사용할 수 있음을 의미
interface: 인터페이스를 정의하기 위해 interface 키워드를 사용
인터페이스는 클래스와 달리 다중 상속을 지원하므로, 여러 개의 인터페이스를 동시에 구현
abstract method: 인터페이스 내부에는 메서드를 선언
이때 메서드는 기본적으로 추상 메서드로 선언
추상 메서드는 구현부가 없이 선언만 되어 있으며, 인터페이스를 구현하는 클래스에서 반드시 구현돼야함.
인터페이스 규칙 (Interface Contract)
ㄴ 정의 : 객체 사용 규칙을 정의하는 것.
인터페이스는 클래스가 어떤 메서드를 구현해야 하는지를 정의하고,
클래스가 해당 인터페이스를 구현하면 그 규칙에 따라 메서드를 구현해야 함
인터페이스 규칙은 클래스 간의 상호작용을 정의하고 표준화된 개발을 도모한다.
예를 들어, 다음은 "Drawable" 인터페이스의 규칙을 정의하는 예시이다.
public interface Drawable {
void draw();
}
위 인터페이스에서는 "draw"라는 메서드를 선언하고 있다.
클래스가 "Drawable" 인터페이스를 구현한다면, 그 클래스는 "draw" 메서드를 반드시 구현해야 한다.
이는 해당 클래스의 인스턴스가 "Drawable" 인터페이스를 준수하는 객체임을 보장한다.
다른 코드에서는 "Drawable" 인터페이스를 통해 다양한 클래스의 인스턴스를 사용할 수 있으며,
"draw" 메서드를 호출할 수 있다.
* 인터페이스 사용 규칙 클래스 적용
Handler 클래스를 인터페이스로 생성
기존의 BoardHandler 클래스를 Handler (인터페이스 클래스)로 implements (구현)
기존의 MemberHandler 클래스를 Handler (인터페이스 클래스)로 implements (구현)
객체를 생성할 때 만들어진 인터페이스 규칙에따라 레퍼런스를 생성한다.
이때 MemberHandler의 설계도에 따라 생성하지만 Handler의 구현 규칙에 따라 만들어진다.
따라서, MemberHandler 클래스의 설계에 따라 MemberHandler 객체가 생성되지만,
이 객체는 Handler 인터페이스의 구현체로 취급된다.
이를 통해 Handler 인터페이스에서 정의된 메서드를 호출하고
Handler 인터페이스의 규칙에 따라 동작하는 객체를 사용할 수 있다.
* 18. 인스턴스 목록을 다루는 코드를 별도의 클래스로 분리
for (Member m : arr) 은 arr의 값을 m에 저장한다.. 1씩 증가시키면서...
수업 내용에서 배운 CRUD 구현 내용 클래스 정리해보기
코드 : github 링크 참조
https://github.com/same-woo/bitcamp-study/tree/main/myapp/app/src/main/java/bitcamp/myapp/project
- MemberHandler:
- 회원과 관련된 업무를 관리합니다.
- 인터페이스를 구현합니다 Handler.
- 구성원 등록, 나열, 보기, 업데이트 및 삭제 방법을 제공합니다.
- 구성원 관리를 위해 개체를 사용합니다 MemberList.
- MemberList:
- 개체 목록을 관리합니다 Member.
- 구성원을 추가, 나열, 검색 및 삭제하는 방법을 제공합니다.
- 내부 배열을 사용하여 구성원을 저장합니다.
- Member:
- 시스템의 구성원을 나타냅니다.
- 이름, 이메일, 비밀번호, 성별 등과 같은 속성을 포함합니다.
- 멤버 특성에 액세스하고 수정하기 위한 getter 및 setter 메서드를 제공합니다.
- BoardHandler:
- 보드와 관련된 작업을 관리합니다.
- 인터페이스를 구현합니다 Handler.
- 게시판 등록, 나열, 보기, 업데이트, 삭제 방법을 제공합니다.
- 보드를 관리하기 위해 개체를 사용합니다 BoardList.
- BoardList:
- 개체 목록을 관리합니다 Board.
- 보드를 추가, 나열, 검색 및 삭제하는 방법을 제공합니다.
- 내부 어레이를 사용하여 보드를 저장합니다.
- Board:
- 시스템의 게시판 또는 게시물을 나타냅니다.
- 제목, 내용, 작성자, 비밀번호, 조회수 등과 같은 속성을 포함합니다.
- 보드 속성에 액세스하고 수정하기 위한 getter 및 setter 메서드를 제공합니다.
- Prompt:
- 콘솔에서 사용자 입력을 읽기 위한 유틸리티 메서드를 제공합니다.
- 클래스를 사용하여 Scanner입력을 읽습니다.
- Handler:
- execute()특정 기능을 처리하는 클래스에서 구현해야 하는 메서드를 정의합니다 .
- 공통 인터페이스가 다른 작업을 처리할 수 있도록 합니다.
- App:
- 주요 애플리케이션 클래스.
- Prompt, MemberHandler, BoardHandler및 의 인스턴스를 설정합니다 ReadingHandler.
- 메뉴를 표시하고 사용자 입력에 따라 해당 핸들러를 실행합니다.