Apex 시작하기
학습 목표
이 유닛을 완료하면 다음을 수행할 수 있습니다.
- Apex 프로그래밍 언어의 주요 기능을 설명할 수 있습니다.
- Apex 클래스를 저장하고 Anonymous.Apex로 메서드를 호출할 수 있습니다.
- Developer Console을 사용하여 디버그 로그를 검사할 수 있습니다.
시작하기 전에
여러분과 함께 Apex 모험을 시작하게 되어 대단히 기쁩니다. 이 모듈에서는 프로그래밍 언어에 대한 기본 사항을 다루지만, 깊이 있는 내용도 함께 살펴볼 예정입니다. 이 모듈이 Apex에 대한 첫 번째 학습인 경우 먼저 빠른 시작: Apex 프로젝트를 진행하는 것이 좋습니다. 그러고 나서 여기로 돌아오세요. 기다리고 있겠습니다.
Apex는 무엇인가요?
Apex는 Java와 유사한 구문을 사용하고 데이터베이스 저장 프로시저와 같이 작동하는 프로그래밍 언어입니다. Apex를 통해 개발자는 버튼 클릭, 관련 레코드 업데이트 및 Visualforce 페이지와 같은 시스템 이벤트에 비즈니스 로직을 추가할 수 있습니다.
언어로서의 Apex는 다음과 같습니다.
- 호스팅됨 - Apex는 서버인 Lightning Platform에서 저장, 컴파일 및 실행됩니다.
- 개체 지향 - Apex는 클래스, 인터페이스 및 상속을 지원합니다.
- 강력한 형식 - Apex는 컴파일 타임에 개체에 대한 참조의 유효성을 검사합니다.
- 다중 테넌트 인식 - Apex는 다중 테넌트 플랫폼에서 실행되므로 코드가 공유 리소스를 독점하는 것을 방지하는 제한을 적용하여 런어웨이 코드를 철저히 보호합니다.
- 데이터베이스와 통합 - 레코드에 간단하게 액세스하고 조작합니다. Apex는 레코드 및 해당 필드에 대한 직접 액세스를 제공하고 해당 레코드를 조작하기 위한 문 및 쿼리 언어를 제공합니다.
- 데이터 중심 - Apex는 데이터베이스에 대한 트랜잭션 액세스를 제공하여 작업을 롤백할 수 있도록 합니다.
- 사용 용이성 - Apex는 친숙한 Java 관용구를 기반으로 합니다.
- 테스트 용이성 - Apex는 유닛 테스트 생성, 실행 및 코드 검사에 대한 기본 제공 지원을 제공할 수 있습니다. Salesforce는 플랫폼 업그레이드 전에 모든 유닛 테스트를 실행하여 모든 사용자 정의 Apex 코드가 예상대로 작동하는지 확인할 수 있습니다.
- 버전 관리 - 사용자 정의 Apex 코드는 API의 다른 버전에 대해 저장할 수 있습니다.
Apex 언어 하이라이트
다른 개체 지향 프로그래밍 언어와 마찬가지로 다음은 Apex가 지원하는 언어 구성 중 일부입니다.
- 클래스, 인터페이스, 속성, 컬렉션(목록, 맵, 세트)
- 개체 및 배열 표기법
- 표현식, 변수 및 상수
- 조건문(if-then-else) 및 제어 플로 문(for 루프 및 while 루프)
다른 개체 지향 프로그래밍 언어와 달리 Apex는 다음을 지원합니다.
- Apex로서의 클라우드 개발은 클라우드에서 저장, 컴파일 및 실행됨.
- 데이터베이스 시스템의 트리거와 유사한 트리거.
- 데이터를 쿼리하고 검색하기 위해 직접 데이터베이스 호출 및 쿼리 언어를 만들 수 있는 Database 문.
- 트랜잭션 및 롤백.
-
public
수정자보다 권한이 더 있는global
액세스 수정자로, 네임스페이스와 애플리케이션 전반에 걸쳐 액세스를 허용함.
- 사용자 정의 코드의 버전 관리.
또한 Apex는 대소문자를 구분하지 않는 언어입니다.
개발 도구
Visual Studio Code용 Salesforce 확장을 사용하여 클라이언트 컴퓨터에서 Apex를 작성하고 디버깅할 수 있습니다. Salesforce Visual Studio Code 확장을 참조하세요.
또한 Salesforce 사용자 인터페이스를 사용하여 브라우저에서 직접 Apex를 작성하고 디버깅 정보에 액세스할 수 있습니다. Your Name(이름)에서 Developer Console을 열거나 빠른 액세스 메뉴()를 엽니다.
데이터 형식 개요
Apex는 Salesforce에 특정한 데이터 형식인 sObject 데이터 형식을 포함하여 다양한 데이터 형식을 지원합니다.
Apex는 다음 데이터 형식을 지원합니다.
- Integer, Double, Long, Date, Datetime, String, ID, Boolean 등과 같은 프리미티브.
- 일반 sObject 또는 계정, 연락처 또는 MyCustomObject__c와 같은 특정 sObject로서의 sObject. (sObject에 대한 자세한 내용은 이후 유닛에서 다루겠습니다.)
- 다음을 포함하는 컬렉션.
- 기본 요소 목록, sObject, 사용자 정의 개체, Apex 클래스에서 생성된 개체 또는 컬렉션의 설정
- 기본 요소 집합, sObject, 사용자 정의 개체, Apex 클래스에서 생성된 개체 또는 컬렉션의 설정
- 프리미티브에서 프리미티브, sObject 또는 컬렉션으로의 맵
- 형식화된 값 목록(열거형이라고도 함)
- 사용자 정의 Apex 클래스
- 시스템 제공 Apex 클래스
Apex 컬렉션: 목록
목록에는 동일한 유형의 정렬된 데이터 컬렉션이 포함됩니다.
다음 두 선언은 동일합니다. colors
변수는 List 구문을 사용하여 선언됩니다.
List<String> colors = new List<String>();
colors
변수는 배열 표기법을 사용하여 선언할 수도 있습니다.
String[] colors = new List<String>();
List.add()
메서드로 새로운 요소를 추가하여 필요에 따라 컬렉션을 늘립니다. 대괄호 배열 표기법을 사용하여 인덱스로 컬렉션의 기존 요소를 참조할 수 있습니다. 하지만 대괄호 배열 표기법을 사용하여 요소를 추가할 수는 없습니다.
이 예는 목록을 만들 때 목록에 요소를 추가하고, add()
메서드를 사용하여 요소를 추가하는 방법을 보여줍니다.
// Create a list and add elements to it in one step List<String> colors = new List<String> { 'red', 'green', 'blue' }; // Add elements to a list after it has been created List<String> moreColors = new List<String>(); moreColors.add('orange'); moreColors.add('purple');
목록 요소는 대괄호 사이에 인덱스를 지정하여 읽을 수 있으며 이를 배열 표기법이라고 합니다. 또한 get()
메서드를 사용하여 목록 요소를 읽을 수 있습니다. 이 예제는 이전 예제에서 만든 목록을 기반으로 하며 두 방법 중 하나를 사용하여 목록 요소를 읽는 방법을 보여줍니다. 이 예제는 목록 요소를 반복하는 방법도 보여줍니다.
// Get elements from a list String color1 = moreColors.get(0); String color2 = moreColors[0]; System.assertEquals(color1, color2); // Iterate over a list to read elements System.debug('Print out the colors in moreColors:'); for(String color : moreColors) { // Write value to the debug log System.debug(color); }
Apex 클래스
Apex 클래스의 이점 중 하나는 코드 재사용입니다. Class 메서드는 트리거 및 기타 클래스에서 호출할 수 있습니다. 다음 튜토리얼에서는 조직에 예제 클래스를 저장하고 이 클래스를 사용하여 이메일을 보내고 디버그 로그를 검사하는 방법을 안내합니다.
Apex 클래스 저장
조직에서 EmailManager
클래스를 저장합니다.
- Your Name(이름)에서 Developer Console을 열거나 빠른 액세스 메뉴()를 엽니다.
- Developer Console에서 File(파일) | New(새로 만들기) | Apex Class(Apex 클래스)를 클릭하고 클래스 이름에 대해 EmailManager를 입력한 다음 OK(확인)를 클릭합니다.
- 기본 클래스 본문을
EmailManager
클래스 예로 변경합니다.
이메일을 전송하고 Apex 클래스 라이브러리의 기본 제공 Messaging 메서드를 사용하는EmailManager
클래스에는 공개 메서드(sendMail()
)가 있습니다. 또한 이 클래스에는 비공개 도우미 메서드(inspectResults()
)가 있으며 이는 비공개이므로 외부에서 호출할 수 없지만 클래스 내에서만 사용됩니다. 이 도우미 메서드는 이메일 보내기 호출의 결과를 검사하고sendMail()
에서 호출됩니다.public class EmailManager { // Public method public void sendMail(String address, String subject, String body) { // Create an email message object Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); // Pass this email message to the built-in sendEmail method // of the Messaging class Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); // Call a helper method to inspect the returned results inspectResults(results); } // Helper method private static Boolean inspectResults(Messaging.SendEmailResult[] results) { Boolean sendResult = true; // sendEmail returns a list of result objects. // Iterate through the list to inspect results. // In this class, the methods send only one email, // so we should have only one result. for (Messaging.SendEmailResult res : results) { if (res.isSuccess()) { System.debug('Email sent successfully'); } else { sendResult = false; System.debug('The following errors occurred: ' + res.getErrors()); } } return sendResult; } }
-
File(파일) | Save(저장)를 클릭하여 클래스를 저장합니다.
참고: 코드의 구문이 올바르지 않으면 오류가 Problems(문제) 탭에 표시됩니다. 오류 세부 정보를 사용해 코드를 수정할 수 있습니다.
이메일을 보내는 메서드 호출
공개 메서드를 호출해 보겠습니다. 이를 위해 익명 Apex 실행을 사용합니다. 익명 Apex를 사용하면 코드 줄을 즉석에서 실행할 수 있으며 특히 기능을 테스트하기 위해 Apex를 호출하는 편리한 방법입니다. 다른 Apex 실행과 마찬가지로 디버그 로그 결과가 생성됩니다.
- Developer Console에서 Debug(디버그) | Open Execute Anonymous Window(익명 실행 창 열기)를 클릭합니다.
- 열리는 창에서 다음을 입력합니다. 'Your email address'를 이메일 주소로 변경합니다.
EmailManager em = new EmailManager(); em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
-
Execute(실행)를 클릭합니다.
이제 받은 편지함에 이메일이 수신되었을 것입니다. 이메일을 확인하세요.
디버그 로그 검사
디버그 로그는 코드 디버깅에 유용합니다. Apex 메서드가 실행되면 호출이 디버그 로그에 기록됩니다. 또한 로그에 고유한 디버그 메시지를 작성할 수 있으므로 오류가 있는 경우 코드를 디버깅하는 데 도움이 됩니다. sendMail()
에서 호출되는 inspectResults()
도우미 메서드는 System.debug()
메서드를 사용하여 로그에 메시지를 써서 이메일 보내기 작업이 성공했는지 또는 오류가 있었는지 여부를 나타내는 메서드입니다. 메서드를 실행할 때 생성된 디버그 로그에서 이러한 메시지를 찾을 수 있습니다.
- Developer Console에서 Logs(로그) 탭을 클릭하고 목록에서 가장 최근 로그를 두 번 클릭합니다.
-
Debug Only(디버그 전용)를 선택하여 로그를 필터링하면
System.debug()
문에 대한 로그 행만 표시됩니다.
이메일이 오류 없이 전송되었다고 가정하면 필터링된 로그 보기에 다음 메시지가 표시됩니다.
DEBUG|Email sent successfully
정적 메서드 호출
클래스의 sendMail()
메서드는 클래스 구성원 변수에 액세스하지 않으며 인스턴스 메서드일 필요가 없습니다. static
키워드를 해당 선언에 추가하여 정적 메서드로 변경해 보겠습니다. 정적 메서드는 클래스의 인스턴스에서 호출할 필요가 없지만 클래스 이름에서 직접 호출되기 때문에 인스턴스 메서드보다 호출하기 쉽습니다.
- Developer Console에서
EmailManager
클래스에 대해 열려 있는 탭을 찾고sendMail()
메서드 정의의 첫 번째 줄을 다음과 같이 수정합니다(유일한 변경 사항은static
키워드에 추가됩니다.).public static void sendMail(String address, String subject, String body) {
-
File(파일) | Save(저장)를 클릭하여 클래스를 저장합니다.
- Execute Anonymous(익명 실행) 창에서 문을 수정하여 클래스 이름에 대한 정적 메서드를 호출합니다.
EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
-
Execute(실행)를 클릭합니다. 이제 이 메서드가 실행되었으므로 이전 단계에서와 같이 이메일을 확인하고 선택적으로 디버그 로그를 확인할 수 있습니다.
리소스