형변환(type casting)은 결과적으로는 데이터 타입이 달라서 그런겁니다.
보통의 경우는 상속관계에서 자주 사용하게 되는데, Fragment.getActivity()를 호출하면 FragmentActivity를 리턴합니다.
public final @Nullable FragmentActivity getActivity()
그런데 님의 액티비티는 AppCompatActivity를 상속받았을 겁니다. AppCompatActivit는 아래와 같이 정의되어 있습니다.
public class AppCompatActivity extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider
FragmentActivity를 상속받았습니다. 그런데 setSupportActionBar는 AppCompatActivity의 멤버 메소드입니다. 따라서FragmentActivity에서는 호출이 안됩니다.
따라서 setSupportActionBar를 호출하기 위해서는 형변환이 되지 않으면 해당 메소드 호출이 안되겠죠.
FragmentActivity fragmentActivity = getActivity();
// fragmentActivity.setSupportActionBar(binding.toolbar); -> 호출불가
AppCompatActivity appCompatActivity = (AppCompatActivity) fragmentActivity;
appCompatActivity.setSupportActionBar(binding.toolbar);
이렇게 형변환이 가능한 이유는, 위에서도 언급했듯이, Fragmernt의 액티비티가 AppCompatActivty타입이기 때문입니다.