인프런 커뮤니티 질문&답변

chobo님의 프로필 이미지

작성한 질문수

코어 자바스크립트

클로저 (closure)

return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.

해결된 질문

작성

·

90

1

선생님 안녕하세요.

아래 코드에서 궁금한 점이 있습니다.

function user(_name) {

var _logged = true;

return {

get name() { return _name },

set name(v) { _name = v },

login() { _logged = true },

logout() { _logged = false },

get status() {

return _logged ? 'login' : 'logout';

}

}

}

var roy = user('재남');

[질문 ①]

제가 알기로 return 문은 하나의 객체만 리턴할 수 있는 걸로 알고 있습니다. 따라서 return { } 안에 있는 get, set, login, logout 함수들을 임의의 주소값 100번지에 담아서 리턴한다고 생각해도 될까요?

[질문 ②]
위와 같은 문법을 객체 리터럴 반환이라고 부르나요?

[질문 ③]
만약 return문 안에 있는 get, set, login, logout 함수들을 넣지 않고 동일한 동작을 하는 함수를 만든다면 어떻게 코드를 작성할까?.... 문법이 이상해서 잘 이해가 되지 않아서 질문드립니다.

답변 1

0

정재남님의 프로필 이미지
정재남
지식공유자

1. 네 맞습니다

2. 명칭이 있는지 모르겠습니다만, 말씀하신대로 객체 리터럴을 반환한 것이므로 그렇게 부르셔도 괜찮을 것 같네요.

3.

문법이 이상해 보이는 건 처음이라 낯설어서 그럴 것이에요. 자바스크립트에서는 객체나 함수를 리턴하는 일이 정말정말 많이 있습니다. 요즘 많이 쓰이는 리액트는 이런 기능 없이는 아예 탄생할 수조차 없었을 겁니다.

return 객체 안의 함수 없이 동일한 동작을 하는 함수라는게 어떤걸 말씀하시는지 상상이 안됩니다.

각각의 목적에 따라 기능을 분리한 것이라, 여러가지 기능을 필요할 때 쓸 수 있도록 한 것이거든요. roy.name 으로 이름값을 가져오고 싶을 때가 있고, roy.name = '정재남' 이라고 해서 이름값을 바꾸고 싶을 때가 있고, roy.login()으로 로그인을 수행하고 싶을 때가 있는거니까요.. 이처럼 미리 '미래에 쓰일 수 있는 기능들'을 예상해서 목적에 따라 다양한 메서드들을 하나의 객체에 담아 반환해 주면, 미래에 필요에 따라 해당 메서드(함수)를 호출해서 사용할 수 있게 되는 것입니다.

이런 개념을 좀 더 잘 이해하고 싶다면 '객체지향'에 대해서도 공부를 해보시면 좋을 것 같고,
혹은 일단 지금은 그냥 이해 안된 채로 넘겼다가 몇 달 뒤에 다시 학습해 보셔도 좋습니다. 시간이 지나고 보면 새롭게 보이는 것들이 생기면서 훨씬 많이 이해할 수 있게 될거예요.

chobo님의 프로필 이미지
chobo
질문자

이해했습니다. 답변 감사합니다!

chobo님의 프로필 이미지

작성한 질문수

질문하기