How do we know which macro be used between uvm_component_util() and uvm_object_util()?

Dear all,
I’m trying to understand about uvm_component_util and uvm_object_util.
Currently I’m referring with Hello World Tutorial of UVM Hello World - EDA Playground

Especially I found the below code in my_testbench_pkg.svh,

class my_agent extends uvm_agen5;
'uvm_component_utils(my_agent);

from here, I’m confused that how do we know what macro be used?
for example, if I set by using object, I’ve got some error message such as TFAFTC Too few arguments to function/task call

class my_agent extends uvm_agen5;
'uvm_object_utils(my_agent);

I think I found one regulary rule of uvm_*_utils.
at sequence class, uvm_object utils be used in sequence class, but uvm_component_utils be used in uvm_agent, uvm_env and uvm_test class.

Could you let me know how do we use which macro should be used in which class?

In reply to verified:
The macro 'uvm_component_utils is used for all UVM components used to construct the UVM environment.
'uvm_object_utils is used for all transient objects like seq_items and sequences

In reply to verified:

See Difference Between UVM_OBJECT and UVM_COMPONENT | Verification Academy