UPROPERTY & UFUNCTION macro vs access modifier in C++

Hi, I am new to UE4 but having been coding in C++ & C# (Unity3D) for years.

I am going through the tutorial of C++ programming in UE4. The macros (UPROPERTY & UFUNCTION) are not quite new to me because in Unity3D there is the same mechanism like “SerialiizeField” property.

However, Unity3D does not allow a private member to be default serialized (though it could be done through “SerialiizeField”). I wonder if I need to take care of these things in UE4. For example should I put every properties and functions as public members?