SlideShare a Scribd company logo
1 of 59
Download to read offline
Apex Trigger를 위한
OOP 기초
(주)천조 이재원
jlee@cheonjo.com
순서
1. Apex Class가 SF에서 어떻게 활용 되는가?
2. Class를 직접 만들지 않고 사용 해보기
3. OOP의 개요 및 필요성
4. Apex Class의 구성 요소
5. 무작정 따라하기 (실습)
6. Q&A
미리 전하는 말씀 - 기획 의도
OOP의 개념은 세일즈포스에 국한 된 것이 아니며 한시간에 많은 개념을 설명 하기는
어렵습니다.
이번 강의는 “어드민을 위한 Apex Trigger 연재 강의”라는 취지에 맞게
SF 어드민의 관점에서 그리고 Apex Trigger를 사용 하는데 있어 Apex Class가
왜 필요 하고 Apex Class를 어떻게 활용하면 되는지에 대한 이해와 간단한 실습을 반복하여
조금이라도 손에 익히는 것을 최우선 목표로 합니다.
Apex Class가 SF에서
어떻게 활용 되는가?
Apex Class가 SF에서 어떻게 활용 되는가?
Account
Trigger
Contact
Trigger
User
Trigger
Lead
Trigger
Apex
Class
어떤 조건이 성립 될 때
반복적 + 공통적으로
사용 되는 기능을 클래스로 정의
Process
Builder
Flow
Apex Class가 SF에서 어떻게 활용 되는가?
Apex
Class
Visualforce
Page
Lightning
Aura
Component
Lightning
Web
Component
REST
API
SOAP
API
Other
Application
화면 개발에 대한 서버사이드 처리 및
이기종 환경과의 데이터 연동을 위해
Apex Class가 SF에서 어떻게 활용 되는가?
세일즈포스의 Governor Limits을 피해 대량의 레코드를 비동기로
생성/수정/삭제 하거나 예약 된 시간에
대량의 레코드에 대한 처리를 해야 할 때
Queueable
Apex Class
Apex Batch
Class
Production
ORG
Scheduled
Batch Class
Apex Class가 SF에서 어떻게 활용 되는가?
Production
ORG
Sandbox ORG에서 개발한 클래스와 트리거를
Production ORG로 배포하기 위해서는
테스트 클래스가 반드시 필요 합니다.
Sandbox
ORG Test
Class
Apex Class
Apex Trigger
Batch Class 예시
Queueable Class 예시
Scheduled Class 예시
REST API Handler Class 예시
Inner Class 예시
Test Class 예시
Class를 내가 만들지 않고
사용 해보기
SF에서 제공 하는 주요 Class 사용 해보기
salesforce developer guide
내가 직접 Class를 만들지
않아도 내장 클래스(SF에서
제공 하는 클래스)를 찾아 즉시
사용 할 수 있습니다.
Google.com에서 오른쪽의
검색어를 넣어 조회 해보세요.
Datetime Class 예제
Decimal Class 예제
String Class 예제
UserInfo Class 예제
타인이 만든 Class 사용 해보기
GitHub.com 같은
웹사이트에서 다른 사람들이
개발한 Class를 찾아서
사용 할 수 있습니다.
타인이 만든 Class 사용 해보기
GitHub.com 외에도
구글링을 통해
해외 블로그 등에서
Class를 구할 수 있습니다.
파트너사에서 남기고 간 Class도 있다.
외주개발을 한 적이 있다면
파트너사 개발자가 만든 클래스들이
귀사의 ORG에 있습니다.
개발자 콘솔에서 확인 할 수 있습니다.
OOP의 개요 및 필요성
객체 지향 프로그래밍(OOP)의 개요
(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중
하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서
벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의
객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모
소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어
개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다.
OOP가 필요한 이유
v.s
당장 편하게 대충 할 것인가? 조금 익혀서 제대로 할 것인가?
OOP가 필요한 이유
v.s
당장 편하게 대충 할 것인가? 조금 익혀서 제대로 할 것인가?
Class가 필수는 아닙니다만!!!
자주 반복 하기엔 매우 비효율적이다.
● Class 없이도 Trigger 내에 필요한 기능을 직접 구현 할 수
있다. 하지만 Trigger의 기능이 복잡해질수록가독성이 매우
떨어진다.
● 개체가 추가 되고 Trigger가 늘어날수록 공통적이고 반복
되는 기능이 필요 하게 된다, 하나의 프로젝트에서다른
사람이 이미 만든 기능을 내가 또 만들고 있다.
(재사용과 공유의 문제)
● A라는 트리거에 구현 된 내용을 Copy & Paste로 B라는
트리거에 붙여 넣을 수 있지만 오류나 변경 된 조건으로 인해
수정이 필요 할 경우 모든 Trigger에서 동일한 수정을
반복해야 한다.(유지보수의 문제)
가마솥 클래스의 구현
프로세스를 개선 해보자.
가마솥 클래스의 구현
불을 피우고 재료를 익힐 어떤 것
클래스 내에 어떤 목적을
이루기 위한 행위들을
메서드로 구현 해놓고 각
메서드를 필요에 따라
실행 시킨다.
가마솥을 보다 규격화 한 전기밥솥 클래스
제대로 뭔가 만들었다.
가마솥을 보다 규격화 한 전기밥솥 클래스
제대로 뭔가 만들었다.
가마솥을 보다 규격화 한 전기밥솥 클래스
제대로 뭔가 만들었다.
단순히 코드를 재사용 하는
목적으로 상속을 사용 하는
것은 아닙니다.
다형성과 다운 캐스팅을
이용한 효율적인 코드작성을
위해 주로 사용 됩니다.
다형성을 위한 인터페이스 선언
기본을 준수하면 가열주방기구로 인정
Apex Trigger 관점에서 OOP가 필요한 이유
즉, 세일즈포스에서 다루는 모든 레코드(데이터)를 객체로 보고 이것에 대한 모든
처리를 Apex Trigger에서 내에서의 구현이 아닌 Apex Class에게 위임하여
처리함으로써 코드가 깔끔해지고 어떤 레코드에 대해 유사 하거나 동일 하게
반복처리 해야 하는 경우 이를 메서드로 만들고 그것을 클래스로 묶어서 코드를
재사용 할 수 있고 향후 유지보수를 쉽고 편리하게 할 수 있습니다.
SF 어드민에게도 OOP 개념이 필요한가?
● OOP의 개념을 자세히는 몰라도 Apex Class 사용법은 아는 것이 좋습니다.
● 내가 만들지 못해도 SF에서 기본 제공 하거나 타인이 만든 Class를 사용 할 수 있습니다.
● Trigger의 개수가 늘어나고 기능이 복잡해질 수록 Class는 필수 입니다.
● 당신이 이직을 하거나 ORG의 개수가 늘어 날 때도 코드를 재사용 하려면 Class가 좋습니다.
● 만약 당신이 U/I 개발에 관심이 있다면 그 때는 더욱 필요하게 됩니다.
● Copy & Paste 보다 Template이 효율적이라고 생각 한다면 아는 것이 좋습니다.
Apex Class의 구성 요소
Apex Class의 구조
● 클래스
● 속성(멤버 변수)
● 메서드(함수)
생성자는 클래스가 실행 될
때 가장 먼저 실행 된다.
각 기능별로 각각의
메서드를 정의 하고
메서드 마다 필요한 기능을
구현한다.
속성은 메서드가 아닌
클래스에 직접 속한 변수로
클래스의 속성
또는 멤버변수라고
부른다.
Apex Class의 형식
접근제어자(Access Modifiers)
Apex Class의 접근 제어자
● private : 접근 제어자를 생략 하는 경우 기본값이 되고 일반적으로 테스트 클래스에서 사용 됨, 다른
클래스에서 접근 할 수 없음.
● public : 웹서비스와의 연계를 제외한 ORG 내에서 사용하기 위한 값이며 가장 보편적으로 사용 됨.
● global : 웹서비스와의 연계를 위한 클래스일 경우 필수 값이며 public 보다 더 열린 개념의 접근 제어자
Apex Class의 레코드 공유 선언
레코드 공유 선언(sharing declaration)
Apex Class의 레코드 공유 선언
● with sharing : Apex Class가 실행 될 때 현재 사용자에게 적용 된 공유 규칙을 적용 합니다.
● without sharing : Apex Class가 실행 될 때 현재 사용자에 적용 된 공유규칙을 무시 합니다.
● Inherited sharing : 이 클래스를 호출한 다른 클래스의 공유규칙에 따라 다르게 동작 합니다.
자세한 사항은 "Using the with sharing, without sharing, and inherited sharing Keywords"을 참조 하세요~
Apex Class의 네이밍 규칙
클래스명(class name)
코드블럭(code block)
Apex Class의 네이밍 규칙
● Apex는 Java 언어와 유사 하므로 클래스의 이름은 파스칼 표기법을 사용하여 첫글자는
대문자로 하여 단어가 결합 될 때마다 각 단어의 첫 글자를 대문자로 표기 하는 것이 일반적
입니다.
● 현재 Apex Class를 코딩 할 때 java, c# 등의 package, name space과 같은 개념을 사용 할 수
없으므로 스네이크 표기법과 파스칼 표기법을 혼용 하는 것이 일반적(?) 입니다.
Apex Class의 네이밍 규칙
“Java coding convention” 또는 “자바 코딩 규칙”
Apex Class의 네이밍 제안
batch_MergeAccount, queue_CheckInventory,
ctrl_InventoryHistory
ws_MonthlyClosing4MRP, sch_TodayBirthday
batch_MergeAccountTester, queue_CheckInventoryTester
메서드(method)란?
● 객체의 기능을 구현 하기 위해 어떤 클래스 안에 구현 되는 함수를 말한다.
● 함수란? 어떤 목적을 달성 하기 위해 특정 기능을 수행 하는 코드의 집합을
말한다.
여러개의 수를 보냄
최종결과인 총합을 리턴
getAdd(new List<Integer>{10, 20, 30});
메서드(method)의 형식
클래스와
마찬가지로
메서드도 접근
제어자가 존재 하며
클래스의 접근
제어자와 동일한
개념을 갖는다.
메서드(method)의 형식
메서드의
실행결과가 필요
없을 경우 void
실행결과가 필요
할 경우
리턴 할 유형을
정의
메서드(method)의 형식
메서드에 어떤 값을
전달하여 실행해야
할 경우
한개 이상의
파라미터
(매개변수)를
보낸다.
● 파라미터를 받아서
처리 할 수 있다.
● 실행 완료 후 결과값을
반환 할 수 있다.
● 파라미터와 결과값
없이 구현 할 수 있다.
메서드(method)의 형식
클래스 안의 메서드(method) 실행하기
Lesson1 lss = new Lesson1(); // 인스턴스 생성
lss.hello1(); // 실행 불가 (private)
lss.hello2(); // 실행 가능
lss.hello3(); // 실행 불가 (static)
Lesson1.hello1(); // 실행 불가
Lesson1.hello2(); // 실행 불가
Lesson1.hello3(); // 실행 가능
무작정 따라하기 (실습)
개발자 콘솔에서
Apex Class 생성하기
File - New - Apex Class
IntelliJ에서
Apex Class 생성하기
Class 폴더에서
마우스 오른쪽
버튼을 클릭
Q&A
Apex Trigger를 위한 OOP 기초

More Related Content

What's hot

Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
정환 임
 
OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.
Ryan Park
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
Jaeho Seok
 

What's hot (12)

스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기스프링보다 중요한 스프링 이야기
스프링보다 중요한 스프링 이야기
 
인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬
 
Swift extensions
Swift extensionsSwift extensions
Swift extensions
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
팀장 잔소리
팀장 잔소리팀장 잔소리
팀장 잔소리
 
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 

Similar to Apex Trigger를 위한 OOP 기초

보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
Eb Styles
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
정환 임
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
Sukjoon Kim
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
codenavy
 
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
C Language II
C Language IIC Language II
C Language II
Suho Kwon
 

Similar to Apex Trigger를 위한 OOP 기초 (20)

[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
Patterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworksPatterns for effectviely documenting frameworks
Patterns for effectviely documenting frameworks
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
 
병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임병렬 프로그래밍 패러다임
병렬 프로그래밍 패러다임
 
7 8 1
7 8 17 8 1
7 8 1
 
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
(고급자바스크립트 강좌)자바스크립트 클래스?
(고급자바스크립트 강좌)자바스크립트 클래스?(고급자바스크립트 강좌)자바스크립트 클래스?
(고급자바스크립트 강좌)자바스크립트 클래스?
 
Java 그쪽 동네는
Java 그쪽 동네는Java 그쪽 동네는
Java 그쪽 동네는
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
The art of readable code ch4 ch8
The art of readable code ch4   ch8The art of readable code ch4   ch8
The art of readable code ch4 ch8
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
C Language II
C Language IIC Language II
C Language II
 
OOP_GETCHA_HANJUNG
OOP_GETCHA_HANJUNGOOP_GETCHA_HANJUNG
OOP_GETCHA_HANJUNG
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
11장 시스템
11장 시스템11장 시스템
11장 시스템
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스
 

Apex Trigger를 위한 OOP 기초

  • 1. Apex Trigger를 위한 OOP 기초 (주)천조 이재원 jlee@cheonjo.com
  • 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
  • 12. REST API Handler Class 예시
  • 15. Class를 내가 만들지 않고 사용 해보기
  • 16. SF에서 제공 하는 주요 Class 사용 해보기 salesforce developer guide 내가 직접 Class를 만들지 않아도 내장 클래스(SF에서 제공 하는 클래스)를 찾아 즉시 사용 할 수 있습니다. Google.com에서 오른쪽의 검색어를 넣어 조회 해보세요.
  • 21. 타인이 만든 Class 사용 해보기 GitHub.com 같은 웹사이트에서 다른 사람들이 개발한 Class를 찾아서 사용 할 수 있습니다.
  • 22. 타인이 만든 Class 사용 해보기 GitHub.com 외에도 구글링을 통해 해외 블로그 등에서 Class를 구할 수 있습니다.
  • 23. 파트너사에서 남기고 간 Class도 있다. 외주개발을 한 적이 있다면 파트너사 개발자가 만든 클래스들이 귀사의 ORG에 있습니다. 개발자 콘솔에서 확인 할 수 있습니다.
  • 24. OOP의 개요 및 필요성
  • 25. 객체 지향 프로그래밍(OOP)의 개요 (영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다.
  • 26. OOP가 필요한 이유 v.s 당장 편하게 대충 할 것인가? 조금 익혀서 제대로 할 것인가?
  • 27. OOP가 필요한 이유 v.s 당장 편하게 대충 할 것인가? 조금 익혀서 제대로 할 것인가?
  • 28. Class가 필수는 아닙니다만!!! 자주 반복 하기엔 매우 비효율적이다. ● Class 없이도 Trigger 내에 필요한 기능을 직접 구현 할 수 있다. 하지만 Trigger의 기능이 복잡해질수록가독성이 매우 떨어진다. ● 개체가 추가 되고 Trigger가 늘어날수록 공통적이고 반복 되는 기능이 필요 하게 된다, 하나의 프로젝트에서다른 사람이 이미 만든 기능을 내가 또 만들고 있다. (재사용과 공유의 문제) ● A라는 트리거에 구현 된 내용을 Copy & Paste로 B라는 트리거에 붙여 넣을 수 있지만 오류나 변경 된 조건으로 인해 수정이 필요 할 경우 모든 Trigger에서 동일한 수정을 반복해야 한다.(유지보수의 문제)
  • 30. 가마솥 클래스의 구현 불을 피우고 재료를 익힐 어떤 것 클래스 내에 어떤 목적을 이루기 위한 행위들을 메서드로 구현 해놓고 각 메서드를 필요에 따라 실행 시킨다.
  • 31. 가마솥을 보다 규격화 한 전기밥솥 클래스 제대로 뭔가 만들었다.
  • 32. 가마솥을 보다 규격화 한 전기밥솥 클래스 제대로 뭔가 만들었다.
  • 33. 가마솥을 보다 규격화 한 전기밥솥 클래스 제대로 뭔가 만들었다. 단순히 코드를 재사용 하는 목적으로 상속을 사용 하는 것은 아닙니다. 다형성과 다운 캐스팅을 이용한 효율적인 코드작성을 위해 주로 사용 됩니다.
  • 34. 다형성을 위한 인터페이스 선언 기본을 준수하면 가열주방기구로 인정
  • 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이 효율적이라고 생각 한다면 아는 것이 좋습니다.
  • 38. Apex Class의 구조 ● 클래스 ● 속성(멤버 변수) ● 메서드(함수)
  • 39. 생성자는 클래스가 실행 될 때 가장 먼저 실행 된다. 각 기능별로 각각의 메서드를 정의 하고 메서드 마다 필요한 기능을 구현한다.
  • 40. 속성은 메서드가 아닌 클래스에 직접 속한 변수로 클래스의 속성 또는 멤버변수라고 부른다.
  • 42. Apex Class의 접근 제어자 ● private : 접근 제어자를 생략 하는 경우 기본값이 되고 일반적으로 테스트 클래스에서 사용 됨, 다른 클래스에서 접근 할 수 없음. ● public : 웹서비스와의 연계를 제외한 ORG 내에서 사용하기 위한 값이며 가장 보편적으로 사용 됨. ● global : 웹서비스와의 연계를 위한 클래스일 경우 필수 값이며 public 보다 더 열린 개념의 접근 제어자
  • 43. Apex Class의 레코드 공유 선언 레코드 공유 선언(sharing declaration)
  • 44. Apex Class의 레코드 공유 선언 ● with sharing : Apex Class가 실행 될 때 현재 사용자에게 적용 된 공유 규칙을 적용 합니다. ● without sharing : Apex Class가 실행 될 때 현재 사용자에 적용 된 공유규칙을 무시 합니다. ● Inherited sharing : 이 클래스를 호출한 다른 클래스의 공유규칙에 따라 다르게 동작 합니다. 자세한 사항은 "Using the with sharing, without sharing, and inherited sharing Keywords"을 참조 하세요~
  • 45. Apex Class의 네이밍 규칙 클래스명(class name) 코드블럭(code block)
  • 46. Apex Class의 네이밍 규칙 ● Apex는 Java 언어와 유사 하므로 클래스의 이름은 파스칼 표기법을 사용하여 첫글자는 대문자로 하여 단어가 결합 될 때마다 각 단어의 첫 글자를 대문자로 표기 하는 것이 일반적 입니다. ● 현재 Apex Class를 코딩 할 때 java, c# 등의 package, name space과 같은 개념을 사용 할 수 없으므로 스네이크 표기법과 파스칼 표기법을 혼용 하는 것이 일반적(?) 입니다.
  • 47. Apex Class의 네이밍 규칙 “Java coding convention” 또는 “자바 코딩 규칙”
  • 48. Apex Class의 네이밍 제안 batch_MergeAccount, queue_CheckInventory, ctrl_InventoryHistory ws_MonthlyClosing4MRP, sch_TodayBirthday batch_MergeAccountTester, queue_CheckInventoryTester
  • 49. 메서드(method)란? ● 객체의 기능을 구현 하기 위해 어떤 클래스 안에 구현 되는 함수를 말한다. ● 함수란? 어떤 목적을 달성 하기 위해 특정 기능을 수행 하는 코드의 집합을 말한다. 여러개의 수를 보냄 최종결과인 총합을 리턴 getAdd(new List<Integer>{10, 20, 30});
  • 50. 메서드(method)의 형식 클래스와 마찬가지로 메서드도 접근 제어자가 존재 하며 클래스의 접근 제어자와 동일한 개념을 갖는다.
  • 51. 메서드(method)의 형식 메서드의 실행결과가 필요 없을 경우 void 실행결과가 필요 할 경우 리턴 할 유형을 정의
  • 52. 메서드(method)의 형식 메서드에 어떤 값을 전달하여 실행해야 할 경우 한개 이상의 파라미터 (매개변수)를 보낸다.
  • 53. ● 파라미터를 받아서 처리 할 수 있다. ● 실행 완료 후 결과값을 반환 할 수 있다. ● 파라미터와 결과값 없이 구현 할 수 있다. 메서드(method)의 형식
  • 54. 클래스 안의 메서드(method) 실행하기 Lesson1 lss = new Lesson1(); // 인스턴스 생성 lss.hello1(); // 실행 불가 (private) lss.hello2(); // 실행 가능 lss.hello3(); // 실행 불가 (static) Lesson1.hello1(); // 실행 불가 Lesson1.hello2(); // 실행 불가 Lesson1.hello3(); // 실행 가능
  • 56. 개발자 콘솔에서 Apex Class 생성하기 File - New - Apex Class
  • 57. IntelliJ에서 Apex Class 생성하기 Class 폴더에서 마우스 오른쪽 버튼을 클릭
  • 58. Q&A