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

2025. 11. 5. 13:49·C#

**“인자를 이벤트 핸들러를 사용해서 넘겨라”**는 말은
지금처럼 메서드 매개변수로 직접 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
'C#' 카테고리의 다른 글
  • 이벤트 핸들러 학습 예제
  • 학생조회프로그램 - 외부클래스 분리버전
  • 인스턴스
  • 학생 추가 기능 분리
joo_coding
joo_coding
2025.02.18~
  • joo_coding
    주코딩일지
    joo_coding
  • 전체
    오늘
    어제
    • 분류 전체보기 (219)
      • 일지 (19)
      • 계획표 (7)
      • 프로젝트 (6)
      • C언어 (35)
        • 연습장 (12)
      • C++ (3)
      • C# (34)
      • Python (28)
        • 연습장 (11)
      • TCP IP (4)
      • DB (2)
      • ubuntu (1)
      • Git (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c언어 #vscode #gcc #윈도우 #c언어윈도우 #gcc윈도우 #vscode윈도우 #c #c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
joo_coding
"이벤트 핸들러"를 사용한 "인자 전달"
상단으로

티스토리툴바