Apex Class
In Apex, you can define top-level classes (also called outer classes) as well as inner classes, that is, a class defined within another class. You can only have inner calsses one level deep.
Class 정의하기 위해선,
1. Access modifiers (제어자)
- Top-level class에서 access modifiers(global, public)를 지정해주어야 한다.
- inner class에서는 사용하지 않아야 한다.
- 클래스: public, default, final, abstract
- 메서드: public, protected, default, private, final, abstract, static
- 멤버변수: public, protected, default, private, final, static
- 지역변수: final - 클래스와 메서드에 static과 abstract를 함께 사용할 수 없다. - abstract메서드의 접근 제어자가 private일 수 없다. - 메서드에 private와 final을 같이 사용할 필요는 없다.
2. Optional definition modifiers (virtual, abstract 등등)
3. Required: The keyword class followed by the name of the class
4. Optional extension and/or implementations
Modifier
Private access modifier
해당 class에서만 code를 사용할 수 있다. 이것은 inner class의 default access modifier이다.
Public access modifier
이 class가 너의 application이나 namespace에서 보인다는 것을 선언한다.
Global access modifier
이 class가 모든 Apex code 어디에서든지 알려진다는 것을 선언한다. Webservice와 정의된 메서드를 포함하는 모든 클래스들은 global로써 선언되어져야 한다. 만약 inner class가 global이면, top-level class도 global이어야 한다.
With sharing or With sharing
이 class가 sharing 규칙을 강화시켜야하는 명시한다. With Sharing: 현재 user의 sharing 규칙을 명시한다. OWD와 Sharing Rule 반영한다. Apex code는 system context에서 실행되기 때문에 규칙을 적용하려면 꼭 이걸 사용해야한다.
Inherited Sharing
Inferited Sharing을 사용하는 것은 AppExchange Security Review하는 것을 가능하게 해주고, 보안을 하게 해준다. Inherited sharing class + with sharing은 다음과 같을 때 사용 (An Aura component controller, A Visualforce controller, An Apex REST service, Any other entry point to an Apex transaction)
Virtual definition modifier
이 class가 extension과 override를 허용하는 것을 선언한다.
Abstract definition modifier
이 클래스가 abstract 메서드를 포함한다는 것을 선언한다. 오로지 그들의 signature을 가지고 있는 abstract 메서드만 선언되고 body엔 정의되지 않는다.
Implement
여러 인터페이스를 가능하게 한다. 하지만 하나의 기존 클래스밖에 extend하지 못한다. 이 제한은 Apex 코드가 다양한 상속을 지원하지 못한다는 것을 의미한다.
Interfaces
-실행되지 않은 method가 없는 class와 같다.
-각각의 method의 body는 비어져있다.
-abstract, final와 함께 대표적인 규제
-어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야함.
-하위 클래스에 특정한 메소드가 반드시 존재하도록 강제함.
-쓰이는 용도: 협업자 상호간에 구체적인 약속을 하기 위해서
'기타' 카테고리의 다른 글
[책갈피] 모든것이 되는 법 - 에밀리 와프닉 (2022) (0) | 2022.06.13 |
---|---|
[Heroku] Heroku app과 Git 연동시 에러 (Items could not be retrieved, Internal server error) (0) | 2022.04.18 |
[알고리즘] 완전탐색 알고리즘 종류 및 공부법 (0) | 2021.09.15 |
[자료구조 기초] (1) 배열, Queue, Stack, Linked List (0) | 2021.05.30 |
개발자가 자료구조 및 알고리즘에 대해서 알아야 하는 이유 (0) | 2021.05.03 |