기본이 중요하다.


드왈라 타프의 책 “천재들의 창조적습관” (번역제목이 맘에안들지만) 에서도 항상 강조하는 것이  기본에 대한 것이다. 기본, 왜 기본을 연습해야 하는지 나름대로 무용을 예를들어서 설명해놓은 것이 맘에 와닿는다. 기본에 충실하지 않고 기본에 충실하게 연습이 안되어있다면, 창조적인 행위를 할 수 없다. 즉, 창조적인 행위는 기본의 실천과 습관화에 달려 있다고 봐도 과언이 아니다.

개발자로서의 기본이 안되어있다는 생각을 주말내 해보게 되었다. 쩝 창피하다 ㅋ. 기본 내공 쌓기를 매일 실천하지 않은 티를 내고 다니다보니 역시나 맘에 또 찔린다. 에궁 기본에 더욱 충실해져야겠다.

맨날 쓰는 접근제한자 정리

클래스 접근 제한자

  • public : 어느 클래스에서라도 접근할 수 있다.
  • abstract : 불완전한 클래스로 직접 객체를 생성할 수 없는 클래스이다.
  • final : 상속을 할 수 없는 클래스이다.
  • default : 접근제한자를 생략할 수 있으며 같은 패키지에서만 접근할 수 있다.

맴버변수 접근 제한자

  • public : 모든 클래스 및 패키지에서 접근이 가능하다.
  • private : 해당 클래스내에서만 접근이 가능하다.
  • protected : 같은 패키지 내에서는 접근이 가능하며 상속을 받았을 경우 다른 패키지에서도 접근이 가능하다.
  • default : 같은 패키지 내에서는 접근이 가능하다.
  • static : 클래스 단위로 존재하는 변수로 모든 객체가 공동으로 사용한다.
  • final : 값을 변경할 수 없다.

메소드 접근 제한자

  • public : 모든 클래스 및 패키지에서 접근이 가능하다.
  • private : 해당 클래스내에서만 접근이 가능한다. 가장 제한적인 방법이다.
  • protected : 같은 패키지 내에서는 접근이 가능하며 상속을 받았을 경우 다른 패키지에서도 접근이 가능하다.
  • default : 같은 패키지 내에서는 접근이 가능하다.
  • static : 클래스 단위로 존재하는 메소드로 모든 객체가 공동으로 사용한다.
  • final : 상속할 수 없다.
  • synchronized : 하나의 스레드만을 접근할 수 있도록 허용
  • abstract : 추상메소드로 중요한 역할을 한다. 불완전한 메소드를 body가 없이 선언부만 있다. 상속을
    받은 클래스는 반드시 재 정의해서 사용해야 한다.

위에는 없는 내용: 파라미터 시그너쳐에 접근 제한자가 들어간 경우 (특이하다 – 이렇게 쓰는 경우가 어떤 경우일까?)도 별다른 고민 없이 로컬 스코프에서는 동일하게 적용된다. (주의!! 쩝 초기화 정도는 가능할 줄 알았다고 착각했었음 ㅡㅡ;;;)

OOP 기본중의 하나인 상속의 두가지 종류 정리 :

  • Class inheritance: 상위 클래스에 정의된 속성과 동작을 하위 클래스로 복사한다. 새로운 속성과 동작을 하위 클래스에 추가하려는 경우에 사용한다. 하위 클래스는 상위 클래스에 정의된 속성과 동작 이름을 그대로 사용함으로써 상위 클래스를 오버라이딩 한다.
  • Interface inheritance: 추상화된 동작의 시그너쳐만 상속받는다. 즉, 각각의 하위 클래스에서 다른 구현을 준비하기 위해서 상위 클래스와 동일한 시그너쳐로 invoke 한다.