System Context : apex 실행시 필드-레벨 보안, 공유 규칙, 권한에 대해서 적용이 안됨. 한마디로 권한이 적용되지 않으므로 모든 데이터에 대해서 접근 가능함.
User Context : apex 실행시 유저에 대하여 권한이 적용됨. 권한이 없는 데이터의 경우 볼 수 없음.
WITH SHARING : With Sharing 키워드 사용시, 유저에 대한 권한이 적용됨. SOQL로 데이터에 접근할때 프로필 / 권한 셋 / 공유규칙 권한을 적용함.
WITHOUT SHARING : Without Sharing 키워드 사용시, 현재 유저가 모든 권한을 무시하고 모든 데이터에 접근 가능함.
Question1의 경우 inner class와 outerclass가 모두 User Context에서 실행되어 유저 권한을 적용한다.
Question2의 경우 outer class는 User Context에 권한을 적용하고, inner class는 System Context에 실행되어 권한을 무시함.