0%

자바스크립트 책을 보다보면, 입급객체, 일급함수이런 말들이 나온다.

자바스크립트의 객체는 일급객체이다.
자바스크립트의 함수는 일금함수이다.

이게 대체 무슨 말일까?
어려워 할 것 없다. 이미 아는 것이지만, 단어가 생소해서 혼동이 올 뿐이다.

1급시민(일급시민:first class citizen)

: 일급객체, 일금함수 이런 말 이전에 일급시민이라는 말 부터 정리해 보도록 하자. 그 이유는 일급객체는 일급시민인 객체를 말하며, 일급함수는 일급시민인 함수를 말하기 때문이다.

일급시민을 간단히 말하자면 차별받지 않고 시민으로서 누릴수 있는 권한을 모두 누릴수 있는 사람을 일급시민이라고 한다.

  • 1급 시민은 투표권이 있다.
  • 1급 시민은 군인이 될 수 있다.
  • 1급 시민은 정치에 참여 할 수 있다.

1800년데 영국에서는 1급시민, 2급시민이 존재 했으며 성인 남성의 경우 1급시민으로서 정치참여가 가능한데 반해, 2급시민인 여성은 정치 참여를 할 수 없었다고 한다.

1급시민 이라는 말은 권한을 많이 누리는 대상이라고 볼 수 있다.

프로그래밍 영역에서 1급시민이란?

: 일단 프로그래밍 영역에서 1급시민을 정의하려면 1급시민이는 것들이 누려야할 권한이 뭔저 정의가 되어 있어야 한다.(실제 투표권 같은 권한 말이다.)

  • 1급 시민은 함수의 인자가 될 수 있다.
  • 1급 시민은 함수의 리턴이 될 수 있다.
  • 1급 시민은 변수에 할당 될 수 있다.

프로그래밍 영역에서 위와 같은 권한을 누리는 것들을 보통 일급시민이라 여긴다. 즉 자바스크립트에서 원시값(일반 자료형)은 1급 시민이다.

1
2
3
4
5
6
7
var temp_int = 1; // 숫자는 변수에 담긴다.
function fn_test_int(a){
return a;
}

var ret_int = fn_test_int(3); // 숫자는 함수의 인자가 된다.
console.log(ret_int); // 숫자는 함수의 리턴이 된다.

1급객체(일급객체:first class object)

자바스크립트의 객체는 1급객체이다.

라는 말은 자바스크립트에서 객체는 1급시민이 누리는 권한을 모두 가지고 있다는 말이다.
따라서 자바스크립트의 객체도 원시값 처럼 다음과 같다.

  • 자바스크립트의 개체는 함수의 인자가 될 수 있다.
  • 자바스크립트의 객체는 함수의 리턴이 될 수 있다.
  • 자바스크립트의 객체는 변수에 할당 될 수 있다.
1
2
3
4
5
6
7
8
var temp_obj = { name :'first class object1'};   // 객체는 변수에 담긴다.

function fn_test_obj(obj){
return obj;
}

var ret_obj = fn_test_obj(temp_obj); // 객체는 함수의 인자가 된다.
console.dir(ret_obj); // 객체는 함수의 리턴이 된다.

1급함수(일급함수:first class function)

자바스크립트의 함수는 1급함수이다.

라는 말은 자바스크립트에서 함수역시 1급시민이 누리는 권한을 모두 가지고 있다는 말이다.따라서 자바스크립트의 함수도 원시값 처럼 다음과 같다.

  • 자바스크립트의 함수는 함수의 인자가 될 수 있다.
  • 자바스크립트의 함수는 함수의 리턴이 될 수 있다.
  • 자바스크립트의 함수는 변수에 할당 될 수 있다.
1
2
3
4
5
6
7
8
9
10
var fn_outer = function(){
console.log('fn_outer 함수 동작...');
return function(){
console.log('리턴되는 함수가 동작...');
};
};

var ret_fn = fn_outer();
ret_fn(); // fn_outer함수의 리턴된 함수가 실행된다. 즉 함수는 함수의 리턴이 될수있다.
ret_fn();

java의 예외처리 내용이 햇갈려서 간만에 java책을 들여다보니 내가 몰랏던 기능들이 있어서 정리해 본다.

1.멀티 catch 구문 a.하나의 catch 블록에서 여러개의 Exception을 잡아서 처리하는 구문이다.

예제1-a

1
2
3
4
5
try{
// ...
}catch(AException a | BException b){
//...
}

자바 7부터 추가된 기능이라고 한다.

자동리소스 닫기(try-with-resources)

a.기존의 try-catch-finally 로 처리하던 관용적인 리소스(db 커넥션, 소켓 등등) 반납 로직을 간편하게 처리하기 위해 나온듯 하다.

b.자동리소스 닫기(try-with-resources)는 코드의 예외 발생 여부와 상관 없이 사용중인 리소스 (각종 입출력 스트림, 서버소켓, 소켓, 각종 채널)의 close() 메소드를 자동으로 호출하여 안전하게 리소스를 반납해준다.

예제 2-b

1
2
3
4
5
6
7
8
9
10
11
try(AStream as = new AStream()){
// 한개의 리소스 사용시
}catch(IOException e){
//...
}

try(AStream as = new AStream(); BStream as = new BStream();){
// 복수 개의 리소스 사용시
}catch(IOException e){
//...
}

기존의 finally를 이용하여 리소스를 클로즈 하는 행위를 자동으로 처리해주는 편리하느 기능이라고 생각 된다.

c. 자동리소스 닫기(try-with-resources)를 사용하기 위해서는 조건이 있다. AutoCloseable이라는 인터페이스를 구현한 리소스객체만 자동리소스 닫기(try-with-resources)를 적용 할 수 있다