규칙은 언어마다 다르다. 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는 그렇게 쓰는게 편하다는 이유로 만들어진 규칙에 불과하다. 처음 시작은 단지 분류였다.