C#

"이벤트 핸들러"를 사용한 "인자 전달"

joo_coding 2025. 11. 5. 13:49

**“인자를 이벤트 핸들러를 사용해서 넘겨라”**는 말은
지금처럼 메서드 매개변수로 직접 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 등)도 쉽게 추가 가능