Set의 경우는 key 값만을 사용하고 key값은 colleciton으로 반환 받아서, JDK 내부의 contatins() 코드는 아래와 같습니다. 하나의 iteration을 돌면서 체크하는 것은 크게 다르지 않습니다. public boolean contains ( Object o ) { Iterator E > it = iterator () ; if ( o == null ) { while ( it . hasNext ()) if ( it . next () == null ) return true ; } else { while ( it . hasNext ()) if ( o . equals ( it . next ())) return true ; } return false ; }
아하... 이렇게 답변하면 될것 같네요. 우리가 지금 실습하는 코드는 main()함수가 시작될때 프로그램이 시작되는 시점입니다. 우리가 만드는 예제 코드는 main()에서 시작되어 여러 객체가 생성되고 main()이 종료되는 것이 끝인데, 이 전에 컴파일 단계에서 .class 파일이 생성되는데 그 .class 파일에는 실제로 수행되어야 하는 코드 영역과, static, 상수, 리터럴 등을 가지고 있는 data 부분이 따로 있습니다. 그렇게 data 부분에 대한 값들은 .class 파일이 메모리에 로드될 때 데이터 영역에 만들어 집니다.
프로그램이 시작할 때 즉, 프로그램이 프로세스로 메모리에 로드되는 시점인데요 그건 우리가 프로그램을 실행할 때 입니다. 가령 워드가 있으면 워드 아이콘을 더블 클릭해서 실행하지요 그때가 프로그램이 실행될 때 라고 합니다. 로드는 메모리 기준으로 보면 프로그램이 시작된다는건 프로세스가 되어 메모리에 로드된다는 의미입니다.
서버 소켓이 accept() 후에는 클라이언트가 연결될 때까지 기다립니다. 그리고 클라이언트가 연결되면 클라이언트와 1:1 통신할 내부 소켓이 반환 됩니다. 빨간 부분은 연결 되었을때 생성된 서버의 내부 소켓의 정보를 콘솔창에 로그로 나타내기 위해 적은 내용입니다. 클라이언트가 연결될 때마다 정보가 출력되는 것을 보실 수 있을 겁니다. readLine은 한 줄을 읽는 것입니다. 소켓은 소켓 버퍼에서 내용을 읽는데.. 내용이 없으면 읽지 않습니다. 위 예제는 클라이언트가 서버와 연결하면서 송신한 내용이 있어서 바로 읽게 됩니다. 채팅과 같은 경우는 while() 문과 같은 반복문을 활용하여 소켓 버퍼에 내용이 들어오게 되는 경우 읽게 구현할 수 있습니다. 소켓의 읽고 쓰는 역할은 클라이언트 서버 모두 동일합니다.
제가 지금 github 에 올라간 Queue 코드를 확인해 보니 다음과 같이 코드가 되어 있습니다. @Override public boolean isEmpty() { if( front == null && rear == null) { return true; } else return false; } head == null 로 체크하는 부분은 List 인데, 확인해보시면 감사하겠습니다.