**“인자를 이벤트 핸들러를 사용해서 넘겨라”**는 말은
지금처럼 메서드 매개변수로 직접 name, age, major 등을 넘기는 대신,
이벤트 기반으로 객체 간 데이터를 전달하라는 뜻이에요.
👉 즉, “버튼이 클릭되면 데이터를 직접 넘기지 말고,
그 클릭에 반응하는 다른 클래스가 이벤트를 ‘구독(subscribe)’해서
데이터를 전달받도록 구조를 바꿔라” 는 의미예요.
🚦 현재 코드의 구조 (직접 호출 방식)
Student student1 = create.CreateStudent(name, age, major);
listManage.AddStudent(students, student1);
👉 Form1이 create와 listManage를 직접 호출
👉 Form1이 모든 데이터 흐름을 제어 (즉, tightly coupled — 강결합)
👉 나중에 로직이 많아지면 유지보수가 어려움
//
⚙️ 변경할 코드의 구조 (이벤트 기반 전달)
이벤트를 이용하면 이런 식으로 바뀝니다 👇
1️⃣ Form1 (발행자) — “학생이 생성되었다”라는 이벤트를 발생시킴
2️⃣ 다른 클래스 (구독자) — 그 이벤트를 듣고 AddStudent() 등의 동작을 수행
즉,
👉 Form1이 데이터를 넘기는 대신
👉 Create 클래스가 “학생이 만들어졌어요!” 하고 알리고
👉 다른 클래스(ListManage 등)가 “그럼 리스트에 추가할게요!” 하고 반응
< 예시 구조>
namespace StudentApp
{
internal class Create
{
// ① 학생이 생성되었을 때 발생하는 이벤트 선언
public event EventHandler<Student> StudentCreated;
// ② 학생 생성 로직
public void CreateStudent(string name, int age, string major)
{
Student student = new Student(name, age, major);
// ③ 이벤트 발생
StudentCreated?.Invoke(this, student);
}
}
}
💡 이렇게 하면 생기는 변화
| 항목 | 기존 방식 | 이벤트 방식 |
| 데이터 전달 | 메서드 매개변수 직접 전달 | 이벤트를 통해 간접 전달 |
| 결합도 | 높음 (Form1이 모든 클래스 호출) | 낮음 (클래스 간 독립성 높아짐) |
| 유지보수 | 변경 시 연쇄 영향 많음 | 독립적 수정 가능 |
| 확장성 | 낮음 | 높음 — 다른 클래스도 같은 이벤트 구독 가능 |
< 정리 >
“이벤트 핸들러로 인자를 넘기라”는 말은 직접 메서드를 호출해서 데이터를 전달하지 말고,
이벤트(Event)를 발행하고(EventHandler를 통해) 다른 클래스가 그걸 받아 처리하도록 만들어라 는 뜻.
< 장점 >
Form1은 단순히 이벤트만 연결 — 로직을 몰라도 됨
Create와 ListManage가 독립적으로 동작
확장성: 다른 구독자(예: FileSaver, Logger 등)도 쉽게 추가 가능
'C#' 카테고리의 다른 글
| 이벤트 핸들러 학습 예제 (0) | 2025.11.06 |
|---|---|
| 학생조회프로그램 - 외부클래스 분리버전 (0) | 2025.11.05 |
| 인스턴스 (0) | 2025.11.05 |
| 학생 추가 기능 분리 (0) | 2025.11.05 |
| 학생 조회 프로그램 - class 버전 (0) | 2025.11.04 |
