본문 바로가기

스터디/etc

코딩을 지탱하는 기술

비교를 통한 배움

  • 규칙은 언어마다 다르다. C언어는 0이 거짓이지만 Java는 참거짓을 위한 형이 따로있기 때문에 0이 참도 거짓도 아니다.

역사를 통한 배움

  • 해당 언어가 어떤 흐름을 따라 만들어졌는지 알게되면 그 기능이 왜 필요한지 납득할 수 있다.

if문과 반복문

  • if문과 반복문은 가독성을 위해 탄생했다. 어셈블리어는 if문이 없지만 C언어에서 간단히 컴파일된다. C언어에서 goto를 사용하면 if문과 반복문을 전부 대체할 수 있다. 하지만 해당 문법들이 도입됨으로써 사람이 프로그램을 보다 편하게 쓰고 읽을 수 있게되었다.

for, for-each

  • for문은 한곳에 모두 정리함으로써 루푸의 의도를 쉽게 이해할 수 있게했다.
  • for-each 구문은 해당 요소 전부에 어떤 처리를 한다는 코드를 쉽게 쓰기 위해 만들어졌다.

함수

  • 함수는 반복해서 사용하는 명령을 한곳에 모아두어 재사용하고싶다는 필요에의해 탄생했다.

에러 처리

  • 반환값으로 실패를 전달하면 실수로 실패를 놓칠 수 있고 에러 처리 때문에 코드를 해석하기 어려워진다. 그래서 실패하면 점프하는 방식이 탄생했다.
  • finally는 메모리 효율성을 위한 리소스 해제를 하기 위해 탄생했다.
  • java는 검사예외를 채택했다. 어떤 예외를 던질지 명시적으로 선언하는 것이다. 검사 예외를 사용하면 깜빡하고 예외를 던질 가능성을 놓쳐버리는 일은 발생하지 않는다. 하지만 다른 언어에서는 잘 사용하지 않는데 한 메서드에서 던질 예외를 추가하면 그 메서드를 사용하는 모든 메서드를 수정해야하는 불편함때문이다.

  • 동적 형결정인지 정적 형결정인지 파악하자. 동적 형결정은 정적 형결정에서 할 수 없었던 유연한 처리가 가능하다. 그러나 컴파일 시에 형이 정해지고 이로인해 일부 버그는 실행전에 찾아낼 수 있는 정적 형결정의 장점은 갖을 수 없다.

객체 지향

  • C++ 설계자는 class를 사용자 정의형과 상속을 강조하지만 객체 지향 용어 발명가는 상태가 가진 객체가 주고받는 메세지를 강조했다.
  • class가 가리키는 것도 언어마다 다르다. C언어에서는 사용자 정의형이지만 동적 형결정 언어인 Python같은 언어는 가리키는 것이 완전달라지게 된다.
  • class는 그렇게 쓰는게 편하다는 이유로 만들어진 규칙에 불과하다. 처음 시작은 단지 분류였다.