들어가기 전 이 글은 자바의 정석 7장을 공부하고 개인적으로 정리한 글입니다. 1. Java의 상속 상속은 기존의 클래스를 재사용하여 새로운 클래스를 생성하는 작업이다. 상속을 통해서 클래스를 작성하면 적은 양의 코드로 새로운 클래스를 작성할 수 있고, 공통된 코드를 한 곳에서 관리할 수 있다. 아래와 같이 정리해 볼 수 있다. 클래스 간에 부모 - 자식 관계는 있다. 그렇지만 형제 관계는 존재하지 않는다. 부모의 모든 것은 자식에게 상속된다. 하지만 자식에서의 변경점은 부모에게 영향을 미치지 않는다. 부모 클래스의 private인 필드 / 메서드는 자식 클래스에서 사용할 수 없다. 자식 클래스를 생성할 때 부모 클래스가 생성되고, 그것이 자식 클래스에게 포함되어 사용되기 때문이다. 자식 클래스를 통해 ..
Link Link는 두 프로세스를 연결하는 명령어다. 두 프로세스가 연결되면 하나의 프로세스가 예상치 못한 throw, Exception이 발생할 경우 연결된 프로세스도 함께 종료된다. 이 때, Link는 양방향 연결을 의미한다. A가 죽어도 B에 영향을 주고, B가 죽어도 A에 영향을 주는 것을 의미한다. Link는 위와 같은 개념을 가진다. 프로세스끼리 Link를 하게 된다면 오류의 전파가 최대한 빨리 중지된다는 관점에서 유용하다. 함께 일하는 프로세스 중에서 일부에서 오류가 발생했다고 가정해보자. 멀쩡한 프로세스들은 문제가 생긴 프로세스들에게 의존하고 있을 수 있다. 이 때 상황을 해결하기 위한 방법은 멀쩡한 프로세스가 망가진 프로세스에게서 의존성을 최대한 없애는 것이다. 얼랭에서는 link를 이용..
대부분의 함수형 언어가 그렇듯, 얼랭도 for / while문을 제공하지 않는다. 이런 반복이 필요할 때, 재귀를 이용해서 하는 것이 필요하다. 재귀 함수를 짤 때 팁 기본적인 조건일 때 어떤 행동을 해야하는지를 먼저 설정한다. 종료 조건을 설정한다. 이후 기본적인 조건에 다음 재귀를 넣어준다. 길이 들어온 리스트의 모든 길이를 구하는 함수를 구현해보자. len([]) -> 0 len(_) -> 1 기본 조건과 종료 조건을 확인하면 다음과 같다. len([]) -> 0; len([_|T]) -> 1 + len(T). 여기에 추가적으로 재귀를 표현만 해주면 손쉽게 구현할 수 있다. 꼬리재귀 fac(N) when N == 0 -> 1; fac(N) when N > 0 -> fac(N-1) * N. 재귀가 길..
9.1 프로세스 연결하기 link(Pid) 프로세스와 프로세스를 연결하기 위해서는 link()라는 BIF를 이용해야한다. link를 이용하면 self() 프로세스와 Pid 프로세스는 연결되게 된다. 연결된다는 것은 하나의 프로세스가 죽으면 다른 프로세스는 종료 신호를 받게 되고, 종료 신호를 받은 프로세스는 별다른 조치를 하지 않는 경우 함께 죽게 된다. 프로세스는 종료 신호를 잡도록(Trap) 요청할 수 있고, 종료 신호를 잡아서 처리할 수 있는 프로세스를 시스템 프로세스라고 한다. 9.2 시스템 프로세스 만들기 process_flag(trap_exit, true), 시스템 프로세스는 다른 프로세스의 종료 신호를 받으면, 그 종료 신호를 처리할 수 있는 프로세스다. 시스템 프로세스를 만들기 위해서는 p..
프로세스 프로세스라는 것은 운영체제에서 자주 사용되는 용어이다. 그렇지만 얼랭에서 프로세스는 운영체제가 아닌 프로그래밍 언어에 속한다. 따라서 얼랭에서의 프로세스는 운영체제에서 가지고 있는 프로세스의 느낌과는 조금은 다르다. 프로세스의 생성과 제거가 매우 빠르다. 프로세스 간 메세지 전송이 매우 빠르다. 매우 많은 수의 프로세스를 가질 수 있음. 모든 OS에서 프로세스가 동일한 방식으로 동작한다. 프로세스는 메모리를 공유하지 않고 독립적이다. 프로세스가 상호작용하는 유일한 방법은 메세지 전달을 통해서다. 기본적으로 프로세스를 생성하거나 메세지를 전달하는 것은 커널을 통해서 하기 때문에 느린 것으로 인지된다. 그렇지만 얼랭에서의 프로세스는 프로그래밍 언어에 속하기 때문에 일반적으로 알고 있던 프로세스보다 ..