Skip to main content

Apex 클래스로 SOQL 쿼리 만들기

학습 목표

이 유닛을 완료하면 다음을 수행할 수 있습니다.

  • 메서드로 SOQL 쿼리를 만들 수 있습니다.
  • SOQL 쿼리에 의해 반환된 데이터를 조작할 수 있습니다.
참고

참고

한국어로 학습하시겠어요? Trailhead playground에서 한국어로 실습 과제를 시작하고, 괄호 안에 제공된 번역을 사용해 탐색해 보세요. 영어 데이터를 기반으로 실습 과제 검증이 이루어지므로 영문으로 표시된 값만 복사해 붙여 넣습니다. 한국어 조직에서 실습 과제를 통과하지 못한 경우, (1) 로캘을 미국을 바꾸고 (2) 여기에 제시된 지침에 따라 언어를 영어로 바꾼 후 (3) "Check Challenge(과제 확인)" 버튼을 눌러 다시 진행해 보세요.

원하는 언어로 Trailhead 사용하기 뱃지를 확인해 현지화된 Trailhead 경험을 활용하는 방법에 대해 자세히 알아보세요.

Trail Together로 함께 따라하기

이 단계를 진행하면서 전문가와 함께 따라하고 싶으세요? Trailhead Live의 Trail Together 시리즈에 포함된 이 비디오를 시청하세요.

(뒤로 돌려 단계를 처음부터 다시 보고 싶은 경우, 이 클립은 17:32분 표식에서 시작된다는 것을 기억하세요.)

소개

이제 SOQL 쿼리의 기초를 이해했으므로 수식 필드에 대한 지식을 SOQL 쿼리에 적용할 수 있습니다.

쿼리는 꽤 간단합니다. SELECT FirstName, LastName FROM Contact

이제 결과 데이터를 저장할 개체가 필요합니다. SOQL 쿼리는 항상 목록 형태로 데이터를 반환하므로 Apex 목록을 만듭니다. 관리자를 위한 Apex 기초에서 배운 바와 같이 목록을 선언하려면 예약된 단어 List, 데이터 형식(< > 안의 문자), 새 목록의 이름 등이 필요합니다. 이 쿼리의 경우 데이터 형식은 Contact이며 새 listOfContacts의 이름을 지정해 보겠습니다. 목록 선언은 다음과 같습니다.

List<Contact> listofContacts

쿼리 결과를 새 목록에 할당하려면 다음과 같이 목록 선언과 쿼리 사이에 할당 연산자인 등호 기호( = )를 삽입합니다.

List<Contact> listofContacts = [SELECT FirstName, LastName FROM Contact];

구문을 보면 이 쿼리는 대괄호[ ]로 묶여 있으며 문이 세미콜론( ; )으로 끝납니다.

Developer Console에서 테스트해 보겠습니다. 테스트를 위해 연락처 목록을 디버그 로그로 보내 코드가 어떻게 작동하는지 확인합니다.

Developer Console에서 코드 테스트

  1. Developer Console에서 Debug(디버그) | Open Execute Anonymous Window(익명 실행 창 열기)를 클릭합니다.
  2. Execute Anonymous(익명 실행) 창에서 쿼리 결과를 새 목록에 할당합니다.
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact LIMIT 2];
  3. 다음 줄에서 listOfContacts 목록을 디버그 로그로 보냅니다.
    system.debug(listOfContacts);
  4. Open Log(로그 열기) 확인란을 클릭합니다.
  5. Execute(실행)를 클릭합니다.
  6. Execution Log(실행 로그) 창 아래의 Debug Only(디버그만) 확인란을 클릭합니다.
    디버그 로그의 첫 두 항목이 다음과 같아야 합니다.
  7. [2] | DEBUG | (Contact: {FirstName = Rose, LastName = Gonzalez, Id = 0036g000040KuVAAU}, Contact: {FirstName = Sean, LastName = Forbes, Id=0036g0000040KuCAAU}). Contact 레코드가 쉼표로 구분되어 순서대로 나열되어 있습니다.

    쿼리에서 결과를 찾지 못하는 경우에도 목록을 반환하지만 목록이 비어 있습니다.

    [2]|DEBUG|()

어떻게 된 걸까요?

SELECT FirstName, LastName FROM Contact LIMIT 2에서 클라우드 안의 Contact Object 아이콘을 가리키는 화살표. 쿼리를 Apex 클래스와 매칭시키는 데이터를 전송하는 두 번째 화살표가 연락처 목록을 가리킵니다. 1. FirstName = Rose, LastName = Gonzalez. 2. FirstName = Sean, LastName = Forbes.

코드가 실행되면 쿼리를 처리합니다.

SELECT FirstName, LastName FROM Contact LIMIT 2

쿼리가 모든 Contacts를 찾고 각 레코드에서 이름과 성을 가져옵니다. 그런 다음 코드가 해당 연락처 레코드의 일부 데이터를 listOfContacts라는 목록에 추가합니다.

마지막으로 2번째 줄에서 System.debuglistOfContacts의 내용을 표시합니다.

Apex에서 SOQL 쿼리 실행

이전 유닛에서는 쿼리 편집기를 사용하여 테이블에 데이터를 반환했습니다. 이번 유닛에서는 Execute Anonymous(익명 실행) 창을 사용하여 쿼리를 실행하고 결과를 디버그 로그로 보냈습니다. 지금은 괜찮지만 사용자가 Developer Console에서 쿼리를 실행할 수 없게 됩니다. 따라서 내 조직의 사용자 인터페이스에서 데이터를 반환하는 방법이 필요합니다. Apex 클래스 및 메서드가 이를 수행하기 위한 방법입니다. Apex에서 SOQL 쿼리를 실행하고 결과를 조작하는 방법을 살펴보겠습니다.

Apex 클래스에 Apex 메서드를 만드는 것부터 시작합니다. Apex 메서드는 쿼리를 실행하여 우리가 원하는 데이터를 선택합니다.

  1. Developer Console에서 File(파일) | New(새로 만들기) | Apex Class(Apex 클래스)를 클릭합니다.
  2. ContactUtility 클래스의 이름을 지정하고 OK(확인)를 클릭합니다.
  3. 클래스가 열립니다. 여기에는 클래스를 선언하고 클래스 본문을 위한 공간이 남아 있는 코드가 표시됩니다.

  4. 두 번째 줄에 viewContacts라는 메서드를 추가합니다.
    public static void viewContacts(){
    }
  5. 세 번째 줄에서 viewContacts 메서드 안에 쿼리를 실행하고 새 목록에 결과를 할당하는 코드를 붙여넣습니다.
    List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
  6. 클래스를 저장합니다.

이제 listOfContacts 목록에 원하는 데이터를 확보했습니다. for 루프를 사용하여 목록을 반복하고 출력에 원하는 형식을 구성해 보겠습니다.

for 루프를 사용하여 목록 반복하기

관리자를 위한 개체 지향 프로그램에서 for 루프를 사용하여 목록의 항목을 하나씩 처리하는 방법을 배웠습니다. 여기에서는 for 루프를 사용하여 각 연락처의 이름과 성을 결합하고 연락처의 성명으로 구성합니다. 먼저 루프를 만든 다음 루프 내의 각 레코드를 처리해 보겠습니다.

for 루프를 선언하려면 변수 이름, 데이터 형식, 루프가 반복하는 목록의 이름이 필요합니다.

for 루프에서는 특정 개체를 직접 참조하지 않습니다. 대신, 루프 내의 목록 항목을 나타내는 변수를 한 번에 하나씩 생성합니다. 변수는 목록의 각 항목에 대한 자리 표시자 역할을 합니다. 원하는 이름을 선택할 수 있지만 단순하게 con이라는 이름을 지정해 보겠습니다. 그런 다음 변수의 데이터 형식인 Contact와 목록 이름인 listOfContacts가 필요합니다. 합치면 다음과 같습니다.

for (Contact con : listOfContacts){ //loop body}

for 루프 선언

  1. viewContacts 메서드에서 SOQL 쿼리 뒤에 다음 코드를 붙여넣습니다.
    for (Contact con : listOfContacts){
        //loop body
    }
  2. 클래스를 저장합니다.

데이터베이스를 쿼리하고(1), 데이터를 선택해 목록에 데이터를 저장하고(2), for 루프를 만들었습니다(3).

1. Select FirstName, LastName FROM Contact LIMIT 2 쿼리가 listOfContacts 목록(2)으로 연결됨. 3. listOfContacts 목록의 연락처를 처리하는 for 루프: for(Contact con : listOfContacts){ //logic goes here}

다음으로 루프 내에서 목록의 항목을 처리합니다. 궁극적으로 listOfContacts의 각 연락처를 다음과 같은 형식으로 표시하고자 합니다.

First Name:<contact's first name>, Last Name:<contact's last name>(이름: <연락처의 이름="">, 성: <연락처의 성="">)연락처의>연락처의>

목록의 항목에 대한 필드를 참조하려면 점 표기법을 사용하여 개체와 해당 필드(object.field)를 지정합니다. 예를 들어 다음과 같이 con(개체 변수)과 FirstName(필드) 사이에 마침표(점 표기법의 '점')를 넣어 listOfContacts 목록에 있는 Contact 개체의 FirstName 필드를 참조합니다.

con.FirstName

목록에는 별도의 이름 및 성 필드가 있습니다. Apex에서 연결을 사용하여 필드 값(경우에 따라 리터럴 텍스트도 함께)을 결합합니다. (연결에 대해서는 관리자를 위한 Apex 기초 과정에서 알아봤습니다.)

다시 상기시키자면 연결을 할 때는 필드 데이터가 object.field로 표시됩니다. 리터럴 텍스트는 작은따옴표로 묶여 있습니다. 필요한 경우 리터럴 텍스트의 시작과 끝에 공백을 넣어야 합니다. 더하기 기호( + )를 사용하여 필드를 결합하거나 필드와 일부 리터럴 텍스트를 결합합니다.

for 루프의 본문을 채워보겠습니다. 먼저 listOfContacts 목록의 모든 항목에 대해 FirstName과 LastName을 fullname이라는 새 변수에 결합합니다.

String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;

FirstName과 LastName 사이에 공백이 있으며 출력은 다음과 같이 나타나야 합니다.

First Name:Angela, Last Name:Carter(이름: Angela, 성: Carter)

다음과 같이 나타나면 안 됩니다.

FirstName:Angela,LastName:Carter

fullName 변수(데이터 형식: String)에 대한 값이 할당되면 다음 줄의 디버그 문에 해당 변수를 삽입합니다.

system.debug(fullName);

for 루프의 목록 항목 처리

  1. viewContacts 메서드에서 //loop body를 다음 코드로 바꿉니다.
    String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;
    system.debug(fullName);
  2. 클래스를 저장합니다.

코드는 다음과 같아야 합니다.

public class ContactUtility {
    public static void viewContacts(){
        List<Contact> listOfContacts = [SELECT FirstName, LastName FROM Contact];
        for (Contact con : listOfContacts){
            String fullName = 'First Name: ' + con.FirstName + ', Last Name: ' + con.LastName;
            system.debug(fullName);
        }
    }
}

클래스, 메서드, SOQL 쿼리가 준비되었으므로 이제 코드를 실행하여 어떻게 작동하는지 알아보겠습니다. Execute Anonymous(익명 실행) 창에서 Apex 코드를 실행하려면 점 표기법을 사용하여 클래스와 메서드를 지정합니다.

  1. Execute Anonymous(익명 실행) 창을 엽니다.
  2. Enter Apex Code(Apex 코드 입력)창에서 기존 코드를 다음 코드로 바꿉니다.
    ContactUtility.viewContacts();
  3. Open Log(로그 열기) 확인란이 선택되어 있는지 확인합니다.
  4. Execute(실행)를 클릭합니다.
  5. Debug Only(디버그만)를 선택합니다.

결과의 첫 여섯 개 행이 다음과 같아야 합니다.

실행 로그
이벤트
세부 사항
USER_DEBUG
[5]|DEBUG|First Name: Rose, Last Name: Gonzalez
USER_DEBUG
[5]|DEBUG|First Name: Sean, Last Name: Forbes
USER_DEBUG
[5]|DEBUG|First Name: Jack, Last Name: Rogers
USER_DEBUG
[5]|DEBUG|First Name: Pat, Last Name: Stumuller
USER_DEBUG
[5]|DEBUG|First Name: Andy, Last Name: Young
USER_DEBUG
[5]|DEBUG|First Name: Tim, Last Name: Barr

보시면 알겠지만 SOQL, for 루프, 연결을 사용하여 연락처 데이터를 검색하고, 데이터를 목록에 할당하고, 목록을 반복하고, 예상 결과를 생성했습니다. 잘 하셨습니다.

리소스

Salesforce 도움말에서 Trailhead 피드백을 공유하세요.

Trailhead에 관한 여러분의 의견에 귀 기울이겠습니다. 이제 Salesforce 도움말 사이트에서 언제든지 새로운 피드백 양식을 작성할 수 있습니다.

자세히 알아보기 의견 공유하기