2. 순서
1. Apex Class가 SF에서 어떻게 활용 되는가?
2. Class를 직접 만들지 않고 사용 해보기
3. OOP의 개요 및 필요성
4. Apex Class의 구성 요소
5. 무작정 따라하기 (실습)
6. Q&A
3. 미리 전하는 말씀 - 기획 의도
OOP의 개념은 세일즈포스에 국한 된 것이 아니며 한시간에 많은 개념을 설명 하기는
어렵습니다.
이번 강의는 “어드민을 위한 Apex Trigger 연재 강의”라는 취지에 맞게
SF 어드민의 관점에서 그리고 Apex Trigger를 사용 하는데 있어 Apex Class가
왜 필요 하고 Apex Class를 어떻게 활용하면 되는지에 대한 이해와 간단한 실습을 반복하여
조금이라도 손에 익히는 것을 최우선 목표로 합니다.
5. Apex Class가 SF에서 어떻게 활용 되는가?
Account
Trigger
Contact
Trigger
User
Trigger
Lead
Trigger
Apex
Class
어떤 조건이 성립 될 때
반복적 + 공통적으로
사용 되는 기능을 클래스로 정의
Process
Builder
Flow
6. Apex Class가 SF에서 어떻게 활용 되는가?
Apex
Class
Visualforce
Page
Lightning
Aura
Component
Lightning
Web
Component
REST
API
SOAP
API
Other
Application
화면 개발에 대한 서버사이드 처리 및
이기종 환경과의 데이터 연동을 위해
7. Apex Class가 SF에서 어떻게 활용 되는가?
세일즈포스의 Governor Limits을 피해 대량의 레코드를 비동기로
생성/수정/삭제 하거나 예약 된 시간에
대량의 레코드에 대한 처리를 해야 할 때
Queueable
Apex Class
Apex Batch
Class
Production
ORG
Scheduled
Batch Class
8. Apex Class가 SF에서 어떻게 활용 되는가?
Production
ORG
Sandbox ORG에서 개발한 클래스와 트리거를
Production ORG로 배포하기 위해서는
테스트 클래스가 반드시 필요 합니다.
Sandbox
ORG Test
Class
Apex Class
Apex Trigger
16. SF에서 제공 하는 주요 Class 사용 해보기
salesforce developer guide
내가 직접 Class를 만들지
않아도 내장 클래스(SF에서
제공 하는 클래스)를 찾아 즉시
사용 할 수 있습니다.
Google.com에서 오른쪽의
검색어를 넣어 조회 해보세요.
25. 객체 지향 프로그래밍(OOP)의 개요
(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중
하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서
벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의
객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모
소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어
개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다.
28. Class가 필수는 아닙니다만!!!
자주 반복 하기엔 매우 비효율적이다.
● Class 없이도 Trigger 내에 필요한 기능을 직접 구현 할 수
있다. 하지만 Trigger의 기능이 복잡해질수록가독성이 매우
떨어진다.
● 개체가 추가 되고 Trigger가 늘어날수록 공통적이고 반복
되는 기능이 필요 하게 된다, 하나의 프로젝트에서다른
사람이 이미 만든 기능을 내가 또 만들고 있다.
(재사용과 공유의 문제)
● A라는 트리거에 구현 된 내용을 Copy & Paste로 B라는
트리거에 붙여 넣을 수 있지만 오류나 변경 된 조건으로 인해
수정이 필요 할 경우 모든 Trigger에서 동일한 수정을
반복해야 한다.(유지보수의 문제)
35. Apex Trigger 관점에서 OOP가 필요한 이유
즉, 세일즈포스에서 다루는 모든 레코드(데이터)를 객체로 보고 이것에 대한 모든
처리를 Apex Trigger에서 내에서의 구현이 아닌 Apex Class에게 위임하여
처리함으로써 코드가 깔끔해지고 어떤 레코드에 대해 유사 하거나 동일 하게
반복처리 해야 하는 경우 이를 메서드로 만들고 그것을 클래스로 묶어서 코드를
재사용 할 수 있고 향후 유지보수를 쉽고 편리하게 할 수 있습니다.
36. SF 어드민에게도 OOP 개념이 필요한가?
● OOP의 개념을 자세히는 몰라도 Apex Class 사용법은 아는 것이 좋습니다.
● 내가 만들지 못해도 SF에서 기본 제공 하거나 타인이 만든 Class를 사용 할 수 있습니다.
● Trigger의 개수가 늘어나고 기능이 복잡해질 수록 Class는 필수 입니다.
● 당신이 이직을 하거나 ORG의 개수가 늘어 날 때도 코드를 재사용 하려면 Class가 좋습니다.
● 만약 당신이 U/I 개발에 관심이 있다면 그 때는 더욱 필요하게 됩니다.
● Copy & Paste 보다 Template이 효율적이라고 생각 한다면 아는 것이 좋습니다.
42. Apex Class의 접근 제어자
● private : 접근 제어자를 생략 하는 경우 기본값이 되고 일반적으로 테스트 클래스에서 사용 됨, 다른
클래스에서 접근 할 수 없음.
● public : 웹서비스와의 연계를 제외한 ORG 내에서 사용하기 위한 값이며 가장 보편적으로 사용 됨.
● global : 웹서비스와의 연계를 위한 클래스일 경우 필수 값이며 public 보다 더 열린 개념의 접근 제어자
44. Apex Class의 레코드 공유 선언
● with sharing : Apex Class가 실행 될 때 현재 사용자에게 적용 된 공유 규칙을 적용 합니다.
● without sharing : Apex Class가 실행 될 때 현재 사용자에 적용 된 공유규칙을 무시 합니다.
● Inherited sharing : 이 클래스를 호출한 다른 클래스의 공유규칙에 따라 다르게 동작 합니다.
자세한 사항은 "Using the with sharing, without sharing, and inherited sharing Keywords"을 참조 하세요~
46. Apex Class의 네이밍 규칙
● Apex는 Java 언어와 유사 하므로 클래스의 이름은 파스칼 표기법을 사용하여 첫글자는
대문자로 하여 단어가 결합 될 때마다 각 단어의 첫 글자를 대문자로 표기 하는 것이 일반적
입니다.
● 현재 Apex Class를 코딩 할 때 java, c# 등의 package, name space과 같은 개념을 사용 할 수
없으므로 스네이크 표기법과 파스칼 표기법을 혼용 하는 것이 일반적(?) 입니다.
49. 메서드(method)란?
● 객체의 기능을 구현 하기 위해 어떤 클래스 안에 구현 되는 함수를 말한다.
● 함수란? 어떤 목적을 달성 하기 위해 특정 기능을 수행 하는 코드의 집합을
말한다.
여러개의 수를 보냄
최종결과인 총합을 리턴
getAdd(new List<Integer>{10, 20, 30});
53. ● 파라미터를 받아서
처리 할 수 있다.
● 실행 완료 후 결과값을
반환 할 수 있다.
● 파라미터와 결과값
없이 구현 할 수 있다.
메서드(method)의 형식
54. 클래스 안의 메서드(method) 실행하기
Lesson1 lss = new Lesson1(); // 인스턴스 생성
lss.hello1(); // 실행 불가 (private)
lss.hello2(); // 실행 가능
lss.hello3(); // 실행 불가 (static)
Lesson1.hello1(); // 실행 불가
Lesson1.hello2(); // 실행 불가
Lesson1.hello3(); // 실행 가능