====================================================================== ■ UI5 Controller.js 핵심 가이드라인 및 라이프사이클 요약 ■ ■ 작성자 : KYH ■ 작성일자 : 2026.06.03 ■ 특이사항 : ---------------------------------------------------------------------- 수정자 : 수정일자 : 변경사항 : ---------------------------------------------------------------------- 수정자 : 수정일자 : 변경사항 : ---------------------------------------------------------------------- 수정자 : 수정일자 : 변경사항 : ====================================================================== 1. Controller.js의 기본 개념 ---------------------------------------------------------------------- - UI5의 MVC(Model-View-Controller) 아키텍처에서 'C(조종자)' 역할을 합니다. - View(XML)가 화면의 껍데기라면, Controller는 버튼 클릭 이벤트 처리, 데이터 가공(Model 제어), 페이지 이동(Routing) 등의 "진짜 로직"을 담당합니다. 2. 기본 소스코드 구조 (Asynchronous Module Definition 패턴 > 필요한 것만, 독립된 방에서 안전하게, 순서 안 꼬이게 불러와서 쓰자) ---------------------------------------------------------------------- sap.ui.define([ "sap/ui/core/mvc/Controller", "sap/ui/model/json/JSONModel" ], function (Controller, JSONModel) { "use strict"; return Controller.extend("homepage.controller.Main", { // [여기에 라이프사이클 및 이벤트 함수들을 작성합니다] }); }); ※ 주의: 상단 sap.ui.define 안에 불러온 라이브러리 순서와 function(...) 안의 파라미터 순서가 1:1로 정확히 매칭되어야 합니다. 3. ★★★ 핵심: 컨트롤러 라이프사이클 (Lifecycle) ★★★ ---------------------------------------------------------------------- UI5 뷰가 켜지고 꺼질 때까지, 엔진이 자동으로 특정 시점에 실행해 주는 4대 내장 함수입니다. 왜 각기 맞는 Lifecycle에 function을 정의해야 할까요? - 만약 HTML이 그려지기 전, 요소를 제어하는 function을 사용하게 되면 브라우저는 요소를 찾지 못합니다. 따라서 각기 맞는 타이밍에 function을 정의하는 것이 좋습니다. 만약, 화면이 그려지기 전에 데이터를 미리 조회해 model을 가지고 있다면? 각 페이지에 권한이 존재한다면? 여러분의 상상에 맡기겠습니다. ① onInit() : 탄생 (Initialization) - 뷰가 처음으로 생성될 때 딱 '한 번'만 실행되는 함수입니다. - 활용: 화면이 켜지기 전에 필요한 기본 데이터(JSONModel) 세팅, 라우터 패턴 매칭 이벤트 등록 등 가장 많이 쓰이는 장소입니다. ② onBeforeRendering() : 화면 그리기 직전 (Before Render) - HTML 화면이 브라우저에 그려지기(Rendering) 직전에 호출됩니다. - 활용: 화면이 보이기 전에 동적으로 컨트롤의 속성을 숨기거나 바꿀 때 쓰이지만, 실무에서는 사용 빈도가 다소 낮습니다. ③ onAfterRendering() : 화면 그린 후 (After Render) - HTML 화면이 완전히 다 그려진 직후에 호출됩니다. - 활용: 화면이 다 떴으므로 특정 인풋 박스에 커서를 포커싱(`focus()`)하거나, 직접 DOM(HTML 태그)을 건드려야 하는 제이쿼리(jQuery) 스크립트를 쓸 때 활용합니다. ④ onExit() : 죽음 (Destruction) - 사용자가 다른 메뉴로 완전히 떠나거나 앱이 파괴될 때 호출됩니다. - 활용: 메모리 누수(Memory Leak)를 막기 위해 `onInit`에서 등록해 두었던 글로벌 이벤트나 라우터 리스너들을 수동으로 해제(destroy/detach)할 때 씁니다. 4. 실무에서 자주 쓰는 핵심 명령어 모음 (Cheat Sheet) ---------------------------------------------------------------------- - 내 뷰 안의 특정 컨트롤(버튼, 인풋 등) 찾기: this.getView().byId("컨트롤ID"); - 모델 심기 (Data Binding): this.getView().setModel(oModel, "모델이름"); - 심어둔 모델 가져오기: this.getView().getModel("모델이름"); - 다른 페이지로 이동하기 (Routing): this.getOwnerComponent().getRouter().navTo("Route이름"); 5. 유지보수를 위한 컨트롤러 작성 팁 ---------------------------------------------------------------------- - View 하나당 Controller 하나가 매칭되는 것이 기본 규칙입니다. - 이벤트 함수 이름은 'on'으로 시작하는 것이 관례입니다. (ex: onLoginBtnPress) - 비즈니스 로직(공통 함수, 데이터 포맷 변경 등)이 너무 길어지면 컨트롤러에 다 적지 말고, 별도의 `formatter.js`나 `utils.js` 파일로 빼서 공유하는 것이 깨끗한 코드를 유지하는 비결입니다. ======================================================================