엄범


```c

typedef struct _node {

    unsigned int data; 

    struct _node *next;

} node;


typedef struct _l_list {

    node *head;

    node *tail;

} l_list;

```

`` node`` 하나만 써서 관리하면 두가지 단점이 있는데,

1. 항상 head를 잃지 않도록 조심해야한다.

2. 끝에서 부터 접근하지 못한다. (항상 head에서 부터 접근해야 한다.)


반면 `` l_list``라는 구조체를 하나 만들어 head와 tail을 가리키도록 만들어 주면, 앞뒤로 접근 가능하며 언제나 head를 따라갈 수 있음을 보장할 수 있다.


C 같은 경우, 잘못해서 `` l_list``를 넘겨야 하는 곳에 `` node``를 넘기는 경우 타입 에러가 발생하기 때문에, 둘을 착각하는 경우를 방지할 수 있다. 이런게 강타입 언어의 장점이라고 할 수 있겠다.