본문 바로가기

개발자정보

세일즈포스 관리자를 위한 객체지향 프로그램

반응형

Classes와 Objects 만들기

학습 목표

이 단원을 완료하면 다음을 수행할 수 있습니다.

  • 클래스와 객체의 관계를 설명합니다.
  • 매개변수를 정의합니다.
  • 반환 값의 차이점을 설명합니다.

 

관리자를 위한 Apex 기본 사항에서 Apex 구문, 변수, 컬렉션 및 조건문에 대해 배웠습니다. 

또한 개발자 콘솔에서 몇 가지 샘플 코드를 실행했습니다. 

이 모듈에서는 이러한 개념을 기반으로 합니다. 

시작합니다.

객체 지향이란 무엇을 의미합니까?

소프트웨어 개발이나 코딩에 대해 읽은 적이 있다면 객체 지향 이라는 용어를 접했을 것입니다 .

객체 지향 클래스, 객체 지향 개념, 객체 지향 프로그래밍. 객체 지향이란 무엇을 의미합니까? 

프로그래밍 언어와 관련하여 객체 지향은 코드가 객체를 설명하는 데 중점을 둡니다. 

개체는 사람, 계정 또는 꽃과 같이 고유한 특성을 가진 모든 것이 될 수 있습니다. 

객체 지향이 무엇을 의미하는지 진정으로 이해하기 전에 이해해야 할 두 가지가 있습니다. 클래스와 객체입니다. 

함께 따라와 함께 Trail

이 단계를 진행하면서 강사와 함께 하고 싶으십니까? 

Trailhead Live에서 Trail Together 시리즈의 일부인 이 비디오를 보십시오. 

https://trailhead.salesforce.com/content/learn/modules/object-oriented-programming-for-admins/create-classes-and-objects

 

클래스(Classes)

클래스는 청사진이다. 

객체는 클래스를 기반으로 합니다. 

클래스(class )는 해당 클래스의 모든 개체에 공통적인 특성(characteristics) 및 동작(behaviors) 집합(set)을 정의합니다.

 

꽃에 대해 생각해보십시오. 색깔, 키 등의 특성을 가지고 있으며, 성장, 시드는 등의 행동을 한다. 

Apex 클래스에서 특성(characteristics) 변수(variables) 라고 하고 동작(behaviors) 메서드(methods) 라고 합니다 .

Characteristics (Variables) Behaviors (Methods)
색상 자라다
수분
최대 높이 이울다
꽃잎 수

정원을 상상해보십시오. 장미, 백합, 데이지는 색과 높이가 다르지만 모두 꽃이고 색과 높이가 있습니다.

클래스 선언 

이 코드  클래스를 선언 (생성)합니다.

클래스는 액세스 한정자, 키워드 "class", 클래스 이름 및 클래스 본문의 네 부분을 사용하여 선언됩니다. 본문(중괄호 안 { })은 클래스의 메서드와 변수가 정의되는 곳입니다. 

액세스 수정자

액세스 한정자는 클래스 나 메소드 선언의 키워드입니다. 액세스 한정자는 다른 Apex 코드가 클래스 또는 메서드를 보고 사용할 수 있는 항목을 결정합니다. 다른 액세스 한정자 public가 있지만 가장 일반적입니다. 공개 클래스는 조직 내의 다른 모든 Apex 클래스에서 사용할 수 있습니다.  

행동 양식

메소드는 클래스 내에서 정의됩니다. 메서드는 해당 클래스의 개체에 의해 상속된 동작을 설명합니다. 클래스는 하나 이상의 메소드를 가질 수 있습니다. Flower 클래스에는 grow, pollinate, 및 wilt.의 세 가지 메서드(동작)가 있습니다.

메소드는 다음과 같이 선언(생성)됩니다.

매개변수

메서드를 생성할 때 코드를 실행하는 데 필요한 모든 값을 항상 알 수 있는 것은 아닙니다. 여러 번, 하나의 작업을 수행하는 메서드를 작성한 다음 유사한 작업을 수행하는 두 번째 메서드를 작성하는 식입니다. 돌이켜 보면 모든 방법이 거의 동일한 작업을 수행한다는 것을 알게 됩니다. 그것들은 약간의 변형이 있는 복제품입니다. 

하나의 방법에 다양한 입력을 제공하는 방법이 있다면. 하지만 기다려! 매개변수를 사용할 수 있습니다! 파라미터 값을 수신하도록 대기하는 자리의 역할을하는 변수이다. 매개변수는 데이터 유형 다음에 매개변수 이름이 오는 변수와 유사하게 선언됩니다. 다음 선언에서 wilt메서드에는 이라는 매개 변수가 numberOfPetals있습니다. (원하는 매개변수 이름을 사용할 수 있지만 매개변수가 보유하는 값을 설명하는 이름을 사용하는 것이 좋습니다.) numberOfPetals매개변수는 데이터 유형이 정수인 값을 수신할 것으로 예상합니다.

wilt메서드를 어떻게 호출(사용) 합니까? 이 코드 샘플에서 첫 번째 줄은 메서드를 호출(사용)하고 값을 전달(전송)합니다 4. 전달한 값을 인수 라고 합니다 . 인수( 4이 경우 ,)는 메서드 이름 뒤에 괄호로 묶입니다.

wilt(4);
public static void wilt(Integer numberOfPetals){
    system.debug(numberOfPetals);
}

 

매개변수를 포함하는 메소드에 값이 전달되면 인수 값이 매개변수 값이 됩니다. 매개변수는 변수로 작동하므로 다른 변수처럼 조작할 수 있습니다. 

플라워 클래스를 살펴보자.

public class Flower {
    public static void wilt(Integer numberOfPetals){
        if(numberOfPetals >= 1){
            numberOfPetals--;
        }
    }
}

 

Flower클래스의 2-6행 에서 wilt메소드는 의 값을 확인합니다 numberOfPetals. 그 수보다 크거나 같다면 1, 다음 wilt방법 으로 감이 는 (감소) numberOfPetals하나. 

반환 유형

당신이 레스토랑에 있고 그들이 제철 요리를 가지고 있는지 알고 싶어한다고 상상해보십시오. 당신은 웨이터에게 "여름 샐러드가 있습니까?"라고 묻는다. 숫자나 전체 문장이 아니라 "예" 또는 "아니요"라는 특정 유형의 응답을 기대합니다. 

메서드 선언은 예상 반환 유형을 명시적으로 명시해야 합니다 . 인수가 매개변수에 지정된 데이터 유형과 일치해야 하는 것과 같은 방식으로 반환된 변수는 메서드 선언에 지정된 반환 유형과 일치해야 합니다. 반환 유형은 부울, 문자열 또는 계정과 같은 특정 데이터 유형이거나 다음 과 같이 void (아무것도 아님)일 수 있습니다 .

public static void wilt(Integer numberOfPetals){
    system.debug(numberOfPetals);
}

 

메서드 반환 유형이 void인 경우 메서드는 값을 반환하지 않습니다. 값을 반환하려면 void다른 반환 유형으로 바꿉니다. 

예를 들어, 여기에서 wilt메서드는 return정수인 (응답) 값을 기대합니다 .

public static Integer wilt(Integer numberOfPetals){
    if(numberOfPetals >= 1){
        numberOfPetals--;
    }
    return numberOfPetals;
}

1행에서 키워드 Integer(바로 뒤 public static)는 메서드가 정수 값을 반환함을 나타냅니다. 5행에서는 return키워드와 numberOfPetals변수 이름을 사용하여 결과 numberOfPetals값 을 반환합니다 . 메서드가 변수 값을 반환할 때 변수 데이터 형식은 메서드가 선언한 반환 형식과 일치해야 합니다. 이 경우 wilt메서드는 정수 값을 반환할 것으로 예상되며 numberOfPetals변수는 정수입니다. 

wilt, grow, 및 pollinate메서드를 테스트해 보겠습니다 . 먼저 메소드 코딩을 마칩니다.

 

메소드 작성

  1. 개발자 콘솔에서 파일 | 새로운 | 에이펙스 클래스 .
  2. 클래스 이름에   입력합니다 .
  3. 클릭 OK .
  4. Flower.apxc 클래스에서 기존 코드를 다음 코드로 바꿉니다.
  5. public class Flower {
        public static Integer wilt(Integer numberOfPetals){
            if(numberOfPetals >= 1){
                numberOfPetals--;
            }
            return numberOfPetals;
        }
        public static void grow(Integer height, Integer maxHeight){
            height = height + 2;
            if(height >= maxHeight){
                pollinate();
            }
        }
        public static void pollinate(){
            System.debug('Pollinating...');
        }
    }
  6. Click File | Save.

이제 완전히 정의된 클래스가 있으므로 테스트할 준비가 되었습니다. 클래스 이름( Flower), 테스트하려는 메서드( wilt및 grow), 각 메서드의 필수 인수만 있으면 됩니다. Grow 메서드는 pollinate 메서드를 호출 (사용)하므로 직접 pollinate 메서드를 호출할 필요가 없습니다. wilt방법 (대한 정수 값 기대 numberOfPetals파라미터)와 그 정수 값을 반환한다. grow및 pollinate방법은 아무것도 반환하지 않습니다. 

메서드 실행

  1. 클릭 디버그 | 익명 실행 창을 엽니다.
  2. Apex 코드 입력 창에서 다음 코드를 붙여넣습니다.
  3. Flower.wilt(4);
    Flower.grow(5, 7);
  4. 선택 열기 로그를 다음 클릭 실행 . 실행 로그가 열리고 코드 실행 결과가 표시됩니다.
  5. 디버그 전용을 선택 합니다.

 grow방법에는 두 개의 매개변수가 포함 height되며 maxHeight. 

Flower.grow(5, 7);메서드에 인수 5(높이는 5인치) 및 7(최대 높이는 7인치)를 전달합니다 grow.  grow메서드는 height변수에 2를 더한 다음(9행) height변수 값을 확인합니다 . height 변수의 값이 maxHeight 변수의 값보다 크거나 같으면 growth 메서드는 pollinate 메서드를 호출합니다.

pollinate 메서드는 반환 유형이 void이기 때문에 아무 것도 반환하지 않습니다.

무슨 일이에요?

디버그 로그에 하나의 항목이 표시되어야 합니다.

성장 매개변수에 2와 6을 사용하면 어떻게 될까요? 시도 해봐. 

무슨 일이야?

디버그 로그를 보면 아무 것도 아닌 것처럼 보입니다. 발생하는 일은 높이를 2로 설정하고 maxHeight를 6으로 설정하면 if 문의 조건이 false가 되어 pollinate메서드가 실행되지 않는다는 것입니다. 

사물

Flower수업은 꽃을 만들기 위한 청사진 이라는 것을 기억하십시오 . 그것은이 color, height, maxHeight, 및 numberOfPetals변수를. 이러한 변수는 null (값 없음)과 같지만 기본값을 가질 수 있습니다.  

객체는 클래스  인스턴스 입니다. 아이들이 부모로부터 눈 색깔과 키와 같은 유전적 특성을 물려받는 것과 마찬가지로 객체는 클래스에서 변수와 메서드를 상속합니다. 





color = null;
height = null;
maxHeight = null;
numberOfPetals = null;

플라워 클래스





grow()


pollinate()


wilt()

color = 'yellow'; color ='red'; color = 'pink';
색상 = '노란색'; 색상 = '빨간색'; 색상 = '핑크';
높이 = 3; 높이 = 6; 높이 = 9;
최대 높이 = 6; 최대 높이 = 8; 최대 높이 = 9;
꽃잎 수 = 4; 꽃잎 수 = 6; 꽃잎 수 = 10;
Flower tulip = new Flower();
tulip.grow();
Flower rose = new Flower();
rose.grow();
Flower peony = new Flower();
peony.grow();

tulip객체의 인스턴스 Flower클래스입니다. 세 개의 꽃 개체 각각은 Flower클래스를 기반으로 하는 특정 꽃 입니다. 클래스를 tulip기반으로 하는 인스턴스를 만들려면 Flower다음 구문을 사용합니다.

Flower tulip = new Flower();

점 표기법  사용 하여 개체의 메서드를 호출 할 수 있습니다 . .method();개체 이름 뒤에 추가하기 만 하면 됩니다. 예를 들어:

tulip.grow();

이제 객체가 클래스의 인스턴스라는 것을 알았습니다. 클래스 내에서 변수는 개체를 설명하고 메서드는 개체가 수행할 수 있는 작업을 정의합니다. 또한 매개변수를 사용하여 변수에서 전달된 값을 수신하고, 데이터 유형에 따라 무언가(또는 데이터 유형에 따라 아무 것도 전송하지 않음)를 다시 메소드로 보내는 리턴 유형을 사용했습니다.

 

Quiz

1. Which method return type returns a value?

A.void

B.Null

C correctString

D.0

2What is the correct syntax for defining a parameter?

A.Boolean.speed

B.(Boolean speed)

C errorBoolean speed;

D.{Boolean speed}

sObjects 및 DML 사용

학습 목표

이 단원을 완료하면 다음을 수행할 수 있습니다.

  • sObject를 정의합니다.
  • sObject와 다른 Apex 데이터 유형의 차이점을 설명합니다.
  • DML을 사용하여 데이터베이스에 레코드를 삽입합니다.

함께 따라와 함께 트레일

이 단계를 진행하면서 강사와 함께 하고 싶으십니까? 

Trailhead Live에서 Trail Together 시리즈의 일부인 이 비디오를 보십시오. 

https://trailhead.salesforce.com/content/learn/modules/object-oriented-programming-for-admins/use-sobjects-and-dml

(이 클립은 21분 39초부터 시작합니다. 되감기하여 단계의 시작 부분을 다시 보고 싶은 경우를 대비해 보세요.)

sObject 란 무엇입니까?

sObject는 정점 데이터 형식에 있다는 조직에 Salesforce의 개체 (sObject)에 대응한다. 

sObject는 하나의 변수에 여러 값을 보유하는 복잡한 데이터 유형입니다. 

계정, 연락처 또는 기회와 같은 Salesforce 개체의 단일 데이터 레코드를 보유합니다. 

관리자를 위한 Apex 기본 사항에서 변수 는 컨테이너와 같다는 것을 기억하십시오 . 

대부분의 변수는 하나의 정보를 보유합니다. 

sObject는 다른 컨테이너를 보유하는 컨테이너입니다. 

sObject 컨테이너 내의 컨테이너는 문자열, 날짜, 정수 또는 부울과 같은 다양한 데이터 유형일 수 있습니다 

새 계정

Name Account Number Phone
차 공장 356281 555-0158
티나의 차 623956 555-0129

이 표의 정보를 보십시오. Data Loader를 사용한 적이 있다면 이 계정 형식에 익숙할 것입니다. 

계정 필드는 이름, 계정 번호 및 전화입니다. 

데이터는 보고서 또는 목록 보기에서 정보를 검색한 경우 표시되는 것입니다.

조직의 개체 필드 는 Apex 코드에서 sObject 속성 이라고 합니다. 

조직 개체의 각 필드에 데이터 유형이 있는 것처럼 각 sObject 속성에는 데이터 유형이 있습니다. 

예를 들어 Account 개체의 Name 필드에는 문자열 데이터 유형 Name이 있으므로 myAcctsObject  속성 에도 문자열 데이터 유형이 myAcct.Name = 'The Tea Factory'있습니다.

 

계정을 수동으로 만들든(Salesforce 사용자 인터페이스에서) 프로그래밍 방식으로 만들든(Apex 코드 사용) 동일한 데이터 유형으로 동일한 값을 설정합니다. 예를 들어 Salesforce 사용자 인터페이스에서 위의 새 계정 테이블의 첫 번째 행에 있는 필드 값으로 계정을 만들 수 있습니다. 프로그래밍 방식으로 동일한 계정을 만들려면 다음과 같이 Apex 코드에서 Account sObject를 사용합니다.

Account myAcct = new Account();
myAcct.Name = 'The Tea Factory';
myAcct.Phone= '555-0129';
myAcct.AccountNumber = '356281';

 

조직에서 이미 익숙한 sObjectName, 점 표기법 및 동일한 기본 필드(이름, 전화 및 계정 번호)를 사용합니다.

이 예에서 myAcct속성( Name, Phone, 및 AccountNumber)에는 익숙한 데이터 유형인 문자열과 정수가 있습니다.

 

Set Field Value

점 표기법을 사용하여 sObject에 값을 할당합니다. 이전 코드 샘플에서 2-4행을 보십시오. sObject를 컨테이너의 컨테이너로 생각하면 해당 행이 가장 큰 컨테이너를 열고 , , 및 컨테이너를 myAcct찾아 값을 추가합니다.NamePhoneAccountNumber

 

Get Field Value

마찬가지로 점 표기법을 사용 하여 sObject에서 값을 가져 옵니다 (검색).

예시: String accountName = myAcct.Name;

이 코드 샘플은 myAcct컨테이너를 열고 컨테이너 내부를 살펴보고 컨테이너를 찾고 Name값을 가져 옵니다 . 이 예에서 반환된 값은 The Tea Factory입니다.

sObject를 선언하는 것은 스프레드시트에 행을 추가하는 것과 같습니다. 다른 계정을 만들 준비가 되면 계정 개체에 새 이름을 지정합니다. 

예를 들어:

Account myAcct2 = new Account();
myAcct2.Name = 'Tina’s Teas';
myAcct2.AccountNumber = '623956';
myAcct2.Phone = '555-0129';

Salesforce 조직에 데이터 추가

Salesforce 조직에 데이터를 추가하기 위해 Apex 코드를 작성할 준비가 되셨습니까? 클래스를 만들고, 메서드를 만들고, sObject를 선언하는 방법을 알고 있습니다. 그러나 Salesforce 데이터베이스에 sObject를 어떻게 추가합니까? Salesforce 조직에 새 레코드를 보내려면 DML(데이터 조작 언어)이라는 것을 사용합니다. 

관리자는 이미 DML에 익숙합니다. Data Loader와 같은 데이터 조작 도구와 함께 사용 하는 Insert (레코드 생성), Update (레코드 편집) 및 Delete (레코드 삭제) 문으로 알고 있습니다. .csv 파일과 Data Loader를 사용하여 행을 추가하거나 레코드를 삽입 또는 업데이트하는 대신 Apex 코드를 작성하여 작업을 수행할 수 있습니다. 사용 에이펙스 코드와 DML Insert, Update그리고 Delete문. 정말 멋진! 이 단원에서는 Insert진술에 중점을 둡니다 .

클래스 정의

  1. 개발자 콘솔에서 File | New | Apex Class.
  2. NewAccounts클래스 이름을 입력 합니다.
  3. 클릭 OK .
  4. 기본 코드를 다음 코드로 바꿉니다.
    public class NewAccounts {
        public static void sObjectsInsert(){
            Account store = new Account();
            store.Name = 'The Tea Factory';
            store.AccountNumber = '356281';
            store.Phone = '555-0158';
            insert store;
        }
    }
  5. 클릭 File | Save.

이제 NewAccounts새 레코드를 만들고 속성을 설정 하는 클래스가 있습니다. 또한 클래스는 insert명령문을 사용 하여 데이터베이스에 새 계정 레코드를 추가합니다. 코드를 실행할 시간입니다!

코드 실행

  1. 클릭 Debug | Open Execute Anonymous Window.
  2. Apex 코드 입력 창에서 다음 코드를 붙여넣습니다.
    NewAccounts.sObjectsInsert();복사
  3. 클릭 열기 로그 체크 박스를 클릭 실행 .
  4. 앱 시작 관리자에서 계정 을 찾아 엽니다 . Tea Factory가 계정 목록에 나타납니다. (티팩토리가 안보이면 페이지를 새로고침하세요.)
  5. 차 공장 을 클릭합니다 .
  6. 세부정보 를 클릭 합니다. 계정 이름, 전화 및 계정 번호 필드에는 NewAccounts클래스 에서 sObject 속성으로 설정한 값이 표시 됩니다.

루프를 사용하여 여러 레코드 생성

한 번에 하나의 계정을 추가하는 것은 그다지 실용적이지 않습니다. 일반적으로 레코드를 가져오거나 업데이트하여 한 번에 많은 계정을 만들어야 합니다.

이전 예에서 하나의 레코드를 추가한 것과 같은 방식으로 여러 레코드를 추가할 수 있지만 다음과 같이 각 레코드에 대해 코드를 반복해야 합니다.

Account store1 = new Account();
Account store2 = new Account();
store1.Name = 'The Tea Factory 1';
store1.AccountNumber = '356281';
store1.Phone = '555-0158';
store2.Name = 'The Tea Factory 2';
store2.AccountNumber = '356282';
store2.Phone = '555-4012';
insert store1;
insert store2;

 

관리자를 위한 Apex 기본 사항에서 루프 및 목록에 대해 배웠습니다. 

이러한 개념을 사용할 수 있는 기회가 있습니다. while루프와 목록을 사용하여 한 번에 많은 레코드를 만들고 모든 레코드를 데이터베이스에 추가할 수 있습니다. 

Data Loader를 사용하여 3개의 레코드가 포함된 .csv 파일을 업로드하고 데이터베이스에 삽입하는 것과 같습니다.

 

메소드 작성

  1. 개발자 콘솔에서 NewAccounts 클래스로 돌아갑니다.
  2. 기존 코드를 다음 코드로 바꿉니다.
      public class NewAccounts {
        public static void sObjectsInsert(Integer value){
            Integer counter = 1;
            //create a list to add our accounts
            List<Account> teaFactoryAccounts = new List<Account>();
            while(counter <= value){
                //display the current counter value
                System.debug('Counter Value before Incrementing ' + counter);
                //create a new account
                Account store = new Account();
                store.Name = 'The Tea Factory ' + counter;
                store.AccountNumber = '35629' + counter;
                teaFactoryAccounts.add(store);
                System.debug(teaFactoryAccounts);
                //increment the counter
                counter = counter + 1;
                System.debug('Counter Value after incrementing ' + counter);
            }
            System.debug('Size of Account List: ' + teaFactoryAccounts.size() );
            System.debug('Elements in Account List: ' + teaFactoryAccounts);
            //insert all of the accounts in the list
            insert teaFactoryAccounts;
        }
    }
  3. 클릭 File | Save.

메서드를 실행합니다.

  1. 클릭 디버그 | 익명 실행 창을 엽니다 .
  2. Apex 코드 입력 창에서 다음 코드를 붙여넣습니다.
    NewAccounts.sObjectsInsert(3);
  3. 선택 로그 열기를  누른 다음 실행 . 로그 창이 열립니다.
  4. 디버그 전용 을 선택 합니다 .

로그의 마지막 항목은 코드가 각 계정에 대한 이름과 계정 번호를 가진 세 개의 계정을 생성했음을 보여줍니다. 

The Tea Factory 1, 356291
The Tea Factory 2, 356292
The Tea Factory 3, 356293

 

teaFactoryAccounts5 호선에서 만든 목록은 다음과 같습니다 :

카운터 변수의 값이 증가할 때마다 목록 의 다음 열린 인덱스 (위치)에 sObject가 생성 됩니다.

당신의 트레일의 기점 놀이터 조직에서 계정 목록으로 돌아 가기를 클릭 계정 . 삽입한 3개의 레스토랑이 계정 목록에 포함됩니다.

Review the Loop Code

while루프 코드를 조사하십시오 . 라는 새 계정 sObject를 인스턴스화합니다 store. 다음 루프는 'The Tea Factory'라는 이름을 설정합니다. 계정 레코드를 구별하기 store.Name위해 루프를 반복할 때마다 문자열 끝에 현재 카운터 값을 추가합니다 .

속성이 설정된 후 값이 카운터보다 크거나 같을 때 루프 조건이 충족될 때까지 루프 의 각 반복 중에 sObject를 목록에 teaFactoryAccounts.add추가합니다 .storeteaFactoryAccountswhile

 

Don’t forget to increment the counter in the while loop.

예제 코드가 카운터에 계속 추가하지 않으면 조건이 충족되지 않습니다. 

while세일즈 포스에 의해 제한 시간 설정에 도달 할 때까지 루프는 기록을 계속 추가 할 것입니다.

조건이 충족되면 while루프가 종료되고 마지막 줄은 teaFactoryAccounts목록을 데이터베이스에 한꺼번에 삽입합니다 .

왜 한번에? 리소스가 제한되어 있으므로 코드에서 insert 문을 150번만 사용할 수 있습니다. 

한 번에 하나의 레코드에 총 150개의 레코드를 삽입할 수 있습니다. 그러나 각 insert 문이 10개의 레코드를 삽입하면 그 합계는 1,500개의 레코드로 증가합니다. 

한 번에 여러 개체를 삽입하면 대량화(효율적인 코드를 작성하여 반복적인 작업 결합)에 도움이 됩니다. 

처음에는 한 번에 10개 정도의 레코드를 삽입할 수 있습니다. 

그러나 애플리케이션이 성장함에 따라 한 번에 200개의 레코드를 삽입하기 시작할 수 있습니다. 

처음부터 벌크화를 사용하면 애플리케이션 성장을 준비할 수 있습니다.

Use DML to Insert Multiple Records
Create a class and one method that creates a specified number of new accounts and adds them to the database.
  • Create a public Apex class named AccountHandler
  • Add a public static method to the class:
    • Name: insertAccount
    • Include a parameter for the number of new accounts:
      • Data type: Integer
    • Create a list of Account records:
      • List name: addAccounts
    • Use a while loop to add N new Accounts to the list, where N is a value that is incremented by 1 during each iteration of the loop:
      • Name: Acme Inc N
      • AccountNumber: A000n
      Hint: You did something like this when you created three new Tea Factory stores.
    • Write one DML statement that inserts all the records into the database at one time
  • Run your insertAccount method
public class AccountHandler {
    public static void insertAccount(Integer value){
        List<Account> addAccounts = new List<Account>();
        Integer  N = 1;
         while( N <= value){
            Account store = new Account();
            store.Name = 'Acme Inc' +  N;
            store.AccountNumber = 'A000' +  N;
            addAccounts.add(store);
            //System.debug(teaFactoryAccounts);
            //increment the counter
             N =  N + 1;             
         }
        insert addAccounts;
    }
}
AccountHandler.insertAccount(3);
select AccountNumber, Name  from Account where AccountNumber like 'A000%'

 

Sets 및 Maps 정의

학습 목표

이 단원을 완료하면 다음을 수행할 수 있습니다.

  • 세트와 맵을 생성합니다.
  • 목록, 집합 및 지도가 어떻게 다른지 설명합니다.
  • 목록 대신 집합을 사용할 시기를 결정합니다.

함께 따라와 함께 트레일

이 단계를 진행하면서 강사와 함께 하고 싶으십니까? 

Trailhead Live에서 Trail Together 시리즈의 일부인 이 비디오를 보십시오. 

 

https://trailhead.salesforce.com/content/learn/modules/object-oriented-programming-for-admins/define-sets-and-maps

(이 클립은 49분 6초부터 시작합니다. 되감기하여 단계의 시작 부분을 다시 보고 싶을 때를 대비해 보세요.)

소개

이미 배웠듯이 목록은 동일한 데이터 유형을 가진 항목의 정렬된 모음입니다. 

각 항목에는 인덱스라는 위치가 있습니다. 

이렇게 하면 번호가 매겨진 색인으로 목록의 항목을 쉽게 검색할 수 있습니다. 그러나 Apex 컬렉션은 단순한 목록 그 이상입니다. 다른 두 가지 유형의 컬렉션은 세트와 맵입니다.

세트(Sets)

지금까지 컬렉션의 한 유형인 목록을 만들었습니다. 

세트는 동일한 유형의 고유한 항목의 정렬되지 않은 세트입니다. 

목록과 유사하게 집합은 요소라고 하는 항목 그룹이며 모든 요소는 문자열, 정수 또는 계정과 같은 동일한 데이터 유형을 갖습니다. 

목록과 달리 집합은 요소에 대한 특정 순서를 유지하지 않습니다. 

요소가 순서가 지정되지 않았기 때문에 세트는 중복을 가질 수 없습니다. 

이미 집합에 있는 요소를 추가하려고 하면 오류가 발생하지 않지만 새 값은 집합에 추가되지 않습니다. 

목록을 반복할 때 항상 항목이 목록에 추가된 순서대로 항목에 액세스한다는 것을 기억하십시오. 

집합을 반복할 때 요소는 순서가 지정되지 않으므로 임의의 순서로 요소에 액세스할 수 있습니다.

집합을 선언하는 것은 목록을 선언하는 것과 같지만 키워드 Set를 List. 문자열 집합을 만들어 봅시다.

 

세트 생성

  1. 개발자 콘솔에서  File | New | Apex Class.
  2. 클래스 이름으로 Tea  입력합니다 .
  3. 클릭 OK .
  4. Tea 클래스의 코드를 다음 코드로 바꿉니다.
    public class Tea{
        public static void orderTea(){
            Set<String> teaTypes = new Set <String>();
            teaTypes.add('Black');
            teaTypes.add('White');
            teaTypes.add('Herbal');
            system.debug(teaTypes);
        }
    }
  5. 클릭 File | Save.

코드 실행

  1. 클릭 디버그 | 익명 실행 창을 엽니다.
  2. Apex 코드 입력 창에서 다음 코드를 붙여넣습니다.
              Tea.orderTea();
  3. 선택 열기 로그를 다음 클릭 실행 . 실행 로그가 열리고 코드 실행 결과가 표시됩니다.
  4. 창 하단에서 디버그 전용  선택 합니다.

디버그 로그에는 블랙, 화이트, 허브의 세 가지 차 유형이 표시됩니다.

방법 설정

각 컬렉션 유형에는 고유한 메서드가 있습니다. 일반적으로 사용되는 add방법 으로 차 종류 목록에 Black, White 및 Herbal을 추가했습니다 . set 메서드에 대해 자세히 알아보려면 이 단원의 끝에 있는 리소스를 참조하세요.

세트에 중복 값 추가

  1. Tea 클래스에서 orderTea 메서드(2-8행)를 다음 코드로 바꿉니다.
    public static void orderTea(){
        Set<String> teaTypes = new Set <String>{'Black', 'White', 'Herbal'};
        system.debug(teaTypes);
        teaTypes.add('Green');
        teaTypes.add('Black');
        system.debug(teaTypes);
    }
  2. 클릭 File | Save.

코드 실행

  1. 다음 코드를 실행하십시오. Tea.orderTea();
    팁: 디버그 | Execute Anonymous를 사용하여 이미 실행한 코드를 다시 실행하려면 마지막 으로 실행합니다. 이 옵션은 메서드를 변경하고 같은 방식으로 다시 실행할 때 편리합니다.
  2. 디버그 로그를 검토하십시오.

4행 teaTypes은 세트의 내용을 확인할 수 있도록 로그에 표시됩니다 . 6행과 7행은 녹색과 검정색을 집합에 추가합니다. 9행 teaTypes은 로그에 표시 되므로 세트의 내용을 다시 확인할 수 있습니다. 블랙이 세트에 추가되지 않은 이유는 무엇입니까? 

집합은 반복되는 값을 허용하지 않는다는 것을 기억하십시오. 또한 List에서와 같이 집합을 인덱싱할 수 없음을 명심하십시오. 집합은 일반적으로 특정 값이 포함되어 있는지 확인하는 데 사용됩니다.

 

Choosing a List or a Set

"이제 목록과 집합을 모두 사용하는 방법을 알고 있습니다. 어떤 것을 사용할지 어떻게 결정합니까?” 만들고 싶은 컬렉션에 대해 생각하고 이 두 가지 질문을 스스로에게 해보세요.

  1. 중복을 허용하시겠습니까?
  2. 아이템의 순서가 중요한가요?

이 질문 중 적어도 하나에 예라고 답한 경우 목록을 사용하십시오. 

두 질문에 모두 아니오라고 답한 경우 세트를 사용하십시오. 

목록과 집합에 대해 배웠지만 컬렉션 유형이 하나 더 있습니다. 다음으로 지도에 대해 알아보겠습니다.

Maps

지도는 목록이나 집합보다 더 복잡한 컬렉션입니다. 

맵의 각 항목은 키와 값(키-값 쌍이라고 함)의 두 부분으로 구성됩니다. 키와 값은 모든 데이터 유형이 될 수 있습니다. 

각 키는 고유하지만 값은 맵 내에서 반복될 수 있습니다. 

전화 국가 코드의 지도를 상상해 보십시오. 국가 코드는 키이고 국가 이름은 값입니다. 각 국가 코드는 고유하지만 국가는 중복될 수 있습니다(국가에 두 개 이상의 국가 코드가 있을 수 있기 때문). 

Put 메서드

키-값 쌍을 맵에 추가하려면 put다음과 같은 방법을 사용하십시오 .

 put메서드에는 키와 값이라는 두 개의 매개변수가 필요합니다. 차 종류(키)와 풍미 프로필(값)의 맵을 만들어 보겠습니다. 

차 종류 및 맛 프로필

차 종류(키) 풍미 프로필(값)
검은 색 거친
허브 달콤한
하얀 달콤한

지도 만들기

  1. Tea 클래스에서 기존 코드를 다음 코드로 바꿉니다.
    public class Tea{
        public static void orderTea(){
            Map <String, String> teaTypes = new Map <String, String>();
            teaTypes.put('Black', 'Earthy');
            teaTypes.put('White', 'Sweet');
            teaTypes.put('Herbal', 'Sweet');
            system.debug(teaTypes);
        }
    }
  2. 클릭 File | Save.

코드 실행

  1. 다음 코드를 실행합니다. Tea.orderTea();
  2. 디버그 로그를 검토하십시오.

디버그 로그는 맵에 세 개의 키 값 쌍이 있음을 보여줍니다.

Black=Earthy, Herbal=Sweet,White=Sweet

Earthy 및 Sweet 값은 풍미 프로파일입니다. 맵에서 중복 값이 ​​허용되기 때문에 Sweet는 두 가지 차 유형에 대한 풍미 프로필입니다.

가져오기 메서드

맵의 값에 액세스하려면 get다음과 같은 방법을 사용하십시오 

기존 키와 함께 제공되는 경우 이 get메서드는 키 값을 반환합니다. 제공된 키가 값에 매핑되지 않은 경우 get메서드는 null을 반환합니다. 맵 선언은 반환 값에 대해 예상하는 데이터 유형을 지정한다는 것을 기억하십시오. 값을 반환하는 변수는 지도 선언이 지정하는 것과 동일한 데이터 유형이어야 합니다.

Map에서 값 가져오기

  1. Tea 클래스에서 orderTea 메서드(2-8행)를 다음 코드로 바꿉니다.
    public static String orderTea(){
        Map <String, String> teaTypes = new Map <String, String>();
        teaTypes.put('Black', 'Earthy');
        teaTypes.put('White', 'Sweet');
        teaTypes.put('Herbal', 'Sweet');
        String flavorProfile = teaTypes.get('Herbal');
        System.debug('The flavorProfile of Herbal is: ' + flavorProfile);
        return flavorProfile;
    }
  2. 클릭 File | Save.

코드 실행

  1. 다음 코드를 실행합니다.  Tea.orderTea();
  2. 디버그 로그를 검토하십시오.

때문에 teaTypes지도를 문자열 값으로 선언되고, 반환 형식도 문자열이어야합니다 ( flavorProfile).

이제 세 가지 유형의 Apex 컬렉션에 대해 알게 되었습니다. 

컬렉션 유형 설명
List 같은 유형의 정렬된 항목 그룹입니다. 각 항목에는 목록에서 해당 위치를 나타내는 색인 번호가 있습니다.
Set 같은 유형의 고유한 항목의 정렬되지 않은 그룹입니다.
Map 키-값 쌍의 컬렉션입니다. 각 고유 키는 단일 값에 매핑됩니다.

고급 모듈에서는 조직 내에서 데이터 쿼리를 시작합니다. 

데이터가 수신되면 정보를 저장할 장소가 필요합니다. 컬렉션은 임시 저장소를 제공하는 데 도움이 됩니다. 

컬렉션에 대해 자세히 알아보려면 리소스 섹션에서 Apex 개발자 가이드 링크를 확인하십시오. 

 

Quiz

1. Which method do you use to add a new string to a set named colors?

A..add

B..put

C..get

D..set

 

2. Which type of collection contains key-value pairs?

A.List

B.Map

C.Set

D.Object

 

For 루프를 사용하여 목록 반복

학습 목표

이 단원을 완료하면 다음을 수행할 수 있습니다.

  • 전통적인 for 루프를 사용할 때와 목록을 사용할 때 또는 반복 for 루프를 설정할 때를 결정하십시오.
  • 전통적인 for 루프와 목록 반복 for 루프를 작성하십시오.

함께 따라와 함께 트레일

이 단계를 진행하면서 강사와 함께 하고 싶으십니까? Trailhead Live에서 Trail Together 시리즈의 일부인 이 비디오를 보십시오. 

 

(이 클립은 1분 3분 24초부터 시작되며, 되감기하여 단계의 시작 부분을 다시 보고 싶은 경우를 대비합니다.)

소개

관리자를 위한 Apex 기본 사항에서 배운 것처럼 루프는 지정된 조건이 충족될 때까지 반복되는 코드 블록입니다. 루프를 사용하면 작업을 반복해서 수행할 수 있습니다. Apex에는 세 가지 유형의 루프가 있습니다. 이미 whileand do-while루프를 사용했습니다 . 세 번째 유형은 for루프입니다. for루프는 같은 방법으로 항목을 반복 while하고 do-while루프하지만, 목록 또는 세트 반복 수도 있습니다. ( forSOQL에서도 루프를 사용할 수 있지만 다른 날을 위한 것입니다.)

이 단원에서는 두 가지 유형의 for루프에 대해 배웁니다 .

  • 전통적인 for루프
  • 목록 또는 반복 for루프 설정

전통적인 For 루프

검토하려면 while및 do-while루프는 코드 블록이 실행되는 횟수를 제어하는 ​​조건을 지정합니다. 조건이 거짓일 때 루프가 종료됩니다. For루프는 동일한 작업을 수행하지만 더 간단한 구문을 사용합니다. 

작동 방식은 다음과 같습니다. 루프가 시작되면 카운터를 초기화합니다. 그런 다음 루프 조건이 참인지 확인합니다. 대답이 예이면 루프가 작업을 수행하고 카운터를 업데이트한 다음 조건을 다시 확인하기 위해 반환됩니다. 조건 확인에 대한 응답이 아니오이면 루프가 중지됩니다.

루프 선언문은 세 가지 작업을 수행합니다.

  1. i변수를 0으로 초기화합니다 .
  2. 조건을 지정하십시오 i < 5.
  3. i변수를 1씩 증가시킵니다 i++.

루프가 시작될 때 i변수는 05보다 작은 입니다. 조건은 true이므로 루프가 한 번 실행됩니다. 한 번의 반복이 끝나면 변수가 증가하고 i가 됩니다 1. 이 값은 여전히 ​​5보다 작습니다. 따라서 루프가 다시 실행됩니다. 이 주기는 까지 계속 i = 5됩니다. 그러면 조건이 false이므로 루프가 종료됩니다.

기존 For 루프 작성 및 실행

  1. 개발자 콘솔에서 디버그 | 익명 실행 창을 엽니다 .
  2. Apex 코드 입력 창에서 다음 코드를 붙여넣습니다.
  3. for(Integer i = 0; i < 5; i++){
        System.debug('The number is ' + i );
    }
  4. 코드를 실행하고 디버그 로그를 검토합니다.

0에서 4로 증가하는 숫자를 표시하는 5개의 항목이 표시되어야 합니다. 

그렇다면 if while및 do-while루프는 루프와 동일한 작업을 for수행하지만 for루프를 사용하는 이유는 무엇입니까? 두 가지 이유: 

  1. For루프는 몇 번이나 루프를 실행해야 하는지 알 때 사용됩니다. 루프가 실행되는 횟수 이외의 조건에 따라 루프를 중지하려면 루프를 사용해야 합니다 while.
  2. For 루프는 변수, 조건 및 증분의 세 부분을 하나의 명령문에 함께 유지하기 때문에 더 간결합니다.

while루프 로 작성된 이 예제를 살펴보고 다시 루프 로 작성 하십시오 for.

while 루프

Integer i = 0;
while (i < 5){
    System.debug('The number is ' + i);
    i++;
}

 

루프를 위해

for(Integer i = 0; i < 5; i++){
    System.debug('The number is ' + i );
}

 

for루프 코드는 컴팩트입니다. while루프 와 동일한 작업을 수행 하지만 5줄 대신 3줄의 코드로 수행합니다. 두 줄의 코드가 지금은 작은 차이처럼 들릴 수 있지만 조직에 수천 줄의 코드가 있는 경우 각 추가 줄이 중요합니다.

루프에 대한 반복 나열 또는 설정

목록 또는 집합 반복 for루프(반복 for루프)는 기존 for루프 의 변형입니다 . 반복 for루프는 목록 또는 집합의 항목을 통해 작동합니다. 목록 또는 집합에는 특정 수의 항목이 있으므로 변수를 증가시키거나 조건을 확인할 필요가 없습니다. 루프는 목록 또는 세트의 모든 항목을 통해 작동한 다음 루프가 종료됩니다.

반복 for루프 의 구문 은 기존 for루프 구문과 약간 다릅니다 . 반복 for루프 를 선언할 때 변수의 데이터 유형은 목록 또는 집합의 데이터 유형과 일치해야 합니다. 다음은 for 루프의 반복 구문입니다.

for (data_type variable_name : list_name or set_name){
    // Loop body
}

 

반복 For 루프 작성

for이 목록을 통해 작업 할 반복 루프를 만들어 보겠습니다 .

List <String> tea = new List<String>{'Black Tea', 'Green Tea', 'Chai Tea'};

합니다 tea목록은 문자열 데이터 유형이 있습니다. 반복 for루프 를 선언 하기 위해 목록 데이터 유형(문자열)과 목록 이름(tea)을 사용합니다.

for (String t : tea) 

이 문은 루프가 시작되기 전에 두 가지 작업을 수행합니다.

  1. t문자열 데이터 유형(목록의 데이터 유형과 일치)으로 변수를 선언합니다 .
  2. 루프가 반복되는 목록으로 차 목록을 지정합니다.

목록 선언과 반복 for루프 선언이 있습니다. 우리가 해야 할 일은 그것들을 루프 본문과 함께 넣는 것뿐이며 코드를 실행할 준비가 된 것입니다.

코드 실행

  1. 개발자 콘솔에서 디버그 | 익명 실행 창을 엽니다 .
  2. Apex 코드 입력 창에서 다음 코드를 붙여넣습니다.
  3. List <String> tea = new List<String>{'Black Tea', 'Green Tea', 'Chai Tea'};
    for(String t : tea){
        System.debug('We have ' + t);
    }
  4. 코드를 실행하고 디버그 로그를 검토합니다.

디버그 로그를 검토하십시오. Black Tea, Green Tea 및 Chai Tea가 있음을 보여주는 3개의 항목이 표시되어야 합니다.

꽤 달콤해!

마무리

잘 했어요! 당신은 꽤 많이 배웠습니다. 개념에 대해 확신이 서지 않으면 Apex 개발자 가이드와 같은 Apex 리소스를 참조하십시오. 답을 찾을 수 있는 위치를 알고 문제 해결에 전념하면 시간이 지남에 따라 Apex 코딩이 더 쉬워집니다. 인내심을 가지세요. 즐거운 코딩!

Quiz

1. True or false: A set iteration for loop includes a counter, a condition, and an increment.

A.True

B.False

2. Which element defines the condition in this for loop code snippet? for(Integer i = 11; i >2; i--){ system.debug(i); }

A.Integer i = 11;

B.i > 2;

C.i--;

D.system.debug(i);

 

반응형