왜 null이 객체이고 null과 undefined의 차이점은 무엇입니까?


866

JavaScript에서 왜 null간주 object됩니까?

확인 중

if ( object == null )
      Do something

와 동일

if ( !object )
      Do something

?

그리고 또한:

차이점은 무엇이며 null그리고 undefined?


6
마지막 질문이 제목에 추가되면 좋을 것입니다. 여기에 대한 답변은 굉장하지만 제목은이 답변이 여기에 있음을 가리 키지 않을 수도 있습니다.
marcos.borunda

6
Null은 JavaScript의 객체가 아닙니다! typeof null === 'object'그러나 그것은 버그입니다! 링크 는 다음과 같습니다. 모든 비디오를 시청하고 즐기십시오 :)
CoR

1
정의되지 않은 NULL 값의 변수가 무엇인지에 대한 공리적 진실로 C / C ++를 사용하고 싶습니다. 매우 간단하기 때문입니다. 그런 다음 이러한 정의가 다른 언어의 사양과 어떻게 비교되는지 확인하십시오.
samis

답변:


1488
(name is undefined)

당신 : 무엇입니까 name? (*)
JavaScript : name ? 무엇입니까 name? 당신이 무슨 말을하는지 모르겠습니다. 이전에 언급 한 적이 없습니다 name. (클라이언트) 측에 다른 스크립팅 언어가 있습니까?

name = null;

당신 : 무엇입니까 name?
JavaScript : 모르겠습니다.

한마디로; undefined사물의 개념이 존재하지 않는 곳이다. 유형이 없으며 해당 범위에서 이전에 참조 된 적이 없습니다. null일이 존재하는 것으로 알려져 있지만 그 가치가 무엇인지는 알 수 없습니다.

기억해야 할 한 가지 즉 null, 개념적,하지와 동일 false또는 ""그들이 타입 캐스팅, 즉 후 동일시하는 경우에도, 또는

name = false;

당신 : 무엇입니까 name?
JavaScript : 부울 false.

name = '';

당신 : 무엇입니까 name?
자바 스크립트 : 빈 문자열


* : name이 문맥에서 정의 된 적이없는 변수를 의미합니다. 정의되지 않은 변수 일 수 있지만 name은 HTML 양식 요소의 속성입니다. 그것은 길을 거슬러 올라가고 신분증 앞에 잘 세워졌습니다. ID는 고유해야하지만 이름은 필요하지 않기 때문에 유용합니다.


14
그러나 JavaScript에서 빈 문자열 ''은 여전히 ​​부울 거짓입니다.
Andreas Grech 2019

117
빈 문자열은 부울 거짓이 아니지만 조건부 컨텍스트에서 거짓 (y) 값 (강제)으로 해석됩니다.
Bryan Matthews

22
두 번째 경우 name = null 인 경우 '모름'대신 JavaScript가 다음과 같이 대답 할 수 있습니다. null 객체. 그 외에는 대답 스타일이 마음에 듭니다.
Jean Vincent

16
나는“모르는 것”보다는 null“아무것도 없다”고 대답합니다 . 널은 값이없는 것으로 정확하게 정의됩니다. 무효, 없음, 나다. 아무것도.
mikl

50
그 스타일의 대답을 좋아하십시오. 일반적으로 "당신은 이전에 언급 한 적이 없습니다 name " 는 사실입니다. 그러나 값을 할당하지 않고 변수를 선언하면 ( var somevar;) 놀라 울 정도로 충분 undefined합니다.
MC 황제

142

차이점은이 스 니펫에 요약 할 수 있습니다.

alert(typeof(null));      // object
alert(typeof(undefined)); // undefined

alert(null !== undefined) //true
alert(null == undefined)  //true

확인 중

object == null확인하는 것과 다릅니다 if ( !object ).

! Boolean(object)단항 !연산자는 오른쪽 피연산자를 자동으로 부울로 캐스팅 하기 때문에 후자는 입니다.

Boolean(null)false와 같으 므로 !false === true.

따라서 객체가 null아니라 false 또는 0 또는 "" 인 경우 다음과 같은 이유로 검사가 통과됩니다.

alert(Boolean(null)) //false
alert(Boolean(0))    //false
alert(Boolean(""))   //false

@kentaromiura 우리에게 자바 스크립트 멍청한 놈들 ... 어쩌면 나만 ...이 부울 (값) 구문은 무엇입니까? 부울로 캐스팅?
xr280xr 2016 년

@ xr280xr 예, 캐스팅 중입니다. String(null)캐스팅의 다른 예를 보십시오 . 당신은 바보 같은 일을 할 수도 Number(null + 2)있지만 ...-)해서는 안됩니다. kentaromiura의 훌륭한 답변.
squidbe

typeof연산자임을 기억하십시오 . 쓰지 않는 것과 같은 이유로 피연산자를 괄호로 묶지 않을 것 var sum = 1 +(1);입니다.
alex

124

null객체가 아닌 , 그것을 인 프리미티브 값 . 예를 들어 속성을 추가 할 수 없습니다. 때로는 사람들이 객체를 객체라고 가정 typeof null합니다 "object". 그러나 이것은 실제로 버그입니다 (ECMAScript 6에서 수정 될 수도 있음).

차이 nullundefined같은 다음이다 :

  • undefined: JavaScript에서 사용되며 "값 없음"을 의미합니다. 초기화되지 않은 변수, 누락 된 매개 변수 및 알 수없는 변수에는 해당 값이 있습니다.

    > var noValueYet;
    > console.log(noValueYet);
    undefined
    
    > function foo(x) { console.log(x) }
    > foo()
    undefined
    
    > var obj = {};
    > console.log(obj.unknownProperty)
    undefined

    그러나 알 수없는 변수에 액세스하면 예외가 발생합니다.

    > unknownVariable
    ReferenceError: unknownVariable is not defined
  • null: 프로그래머가 "값 없음"을 표시하기 위해 사용합니다 (예 : 함수의 매개 변수).

변수 검사 :

console.log(typeof unknownVariable === "undefined"); // true

var foo;
console.log(typeof foo === "undefined"); // true
console.log(foo === undefined); // true

var bar = null;
console.log(bar === null); // true

일반적으로 JavaScript에서는 항상 ===를 사용하고 절대 ==를 사용하지 않아야합니다 (== 는 예기치 않은 결과를 생성 할 수있는 모든 종류의 변환 을 수행함 ). 이 검사 x == null는 다음 nullundefined같이 작동하기 때문에 가장 중요한 경우입니다 .

> null == null
true
> undefined == null
true

변수에 값이 있는지 확인하는 일반적인 방법은 변수를 부울로 변환하여 값인지 확인하는 것입니다 true. 이 변환은 if명령문과 부울 연산자 로 수행됩니다 ! ("아니").

function foo(param) {
    if (param) {
        // ...
    }
}
function foo(param) {
    if (! param) param = "abc";
}
function foo(param) {
    // || returns first operand that can't be converted to false
    param = param || "abc";
}

이 방법의 단점 : 다음과 같은 값으로 평가 모두의 false당신이 (예를 들어, 위의 수표를 구별 할 수 없습니다주의해야합니다, 그래서 undefined하고 0).

  • undefined, null
  • 부울 : false
  • 숫자 : +0, -0,NaN
  • 문자열 : ""

Boolean함수 로 사용하여 부울로의 변환을 테스트 할 수 있습니다 (일반적으로와 함께 사용되는 생성 자임 new).

> Boolean(null)
false
> Boolean("")
false
> Boolean(3-3)
false
> Boolean({})
true
> Boolean([])
true

1
왜 참조 +0하고 -0별도로 +0 === -0?
Raynos

6
아마 당신은 여전히 구별 할 수 있기 때문에 +0-0: 1/+0 !== 1/-0.
neo

1
아마이 대신에 링크를 의미 링크 소스로이 답변에 백업하는 것이 게시물이 응답 링크 ... 2ality.com/2013/10/typeof-null.html
리카르도 토마시

C와 마찬가지로 초기화되지 않은 변수 선언은 정의되지 않은 것으로 간주됩니다 (이전 버전에는 실제로 이전 프로그램 데이터가 포함될 수 있음).
samis

5
"그러나 그것은 실제로 버그입니다 (ECMAScript 6에서 수정 될 수도 있습니다)"– source?
Gajus

26

null과 undefined의 차이점은 무엇입니까 ??

정의가없는 속성은 정의되지 않습니다. null은 객체입니다. 유형은 객체입니다. null은 "값 없음"을 의미하는 특수한 값입니다. undefined는 객체가 아니며 유형은 정의되지 않습니다.

변수를 선언하고 null로 설정하면 "null"이 출력되고 "undefined"가 표시되는 것을 제외하고는 동작이 동일합니다. 정의되지 않은 변수를 null로 또는 그 반대로 비교할 수도 있으며 조건은 true입니다.

 undefined == null
 null == undefined

자세한 내용 은 null과 undefined의 JavaScript 차이를 참조하십시오 .

그리고 새로운 편집으로

if (object == null)  does mean the same  if(!object)

object가 false 인 경우 테스트 할 때 false 인 경우 테스트 할 때만 조건을 충족 하지만 true 인 경우

여기를 확인하십시오 : Javascript gotcha


4
===를 사용하고 나서 undefined! == null을 사용해야합니다. : D
olliej

1
) 마지막 부분에 관심을 지불, 내 대답을 참조 잘못된
kentaromiura

6
! object는 "object == null"과 같지 않습니다 ... 실제로는 완전히 다릅니다. ! 객체가 0, 빈 문자열, 부울 false, 정의되지 않은 또는 null 인 경우! object는 true를 반환합니다.
James

3
null은 실제로 객체입니까? 제공 한 첫 번째 링크는 typeof로 null을 확인하지만 언어 디자인 오류로 인해 typeof (null)은 'object'로 평가됩니다.
c4il

2
null객체가 아닙니다. 그건 typeof null == 'object';true를 반환하기 때문에 자바 스크립트에서 수정 될 수없는 버그입니다 (현재,하지만 미래에 변경 될 수 있습니다).
Mohamad

21

질문의 첫 부분 :

JavaScript에서 null이 객체로 간주되는 이유는 무엇입니까?

그들이 지금 고칠 수없는 JavaScript 디자인 오류입니다. 유형이 아니거나 유형이 아니어야합니다. 실제 객체를 감지 할 때 추가 검사 (때로는 잊혀짐)가 필요하며 버그의 원인입니다.

질문의 두 번째 부분 :




if (object == null)
Do something

같은 검사

if (!object)
Do something

두 가지 검사는 다음을 제외하고 항상 모두 거짓입니다.

  • object가 정의되지 않았거나 null 인 경우 모두 true입니다.

  • object가 프리미티브이고 0, ""또는 false : 첫 번째 확인 false, 두 번째 true.

객체가 프리미티브가 아니라 실제 객체 (예 new Number(0): new String(""), 또는) new Boolean(false)인 경우 두 검사는 모두 거짓입니다.

따라서 'object'가 실제 Object를 의미하는 것으로 해석되면 두 검사는 항상 동일합니다. 프리미티브가 허용되면 검사는 0 "", 및 false에 대해 다릅니다 .

과 같은 object==null경우, 명백하지 않은 결과는 버그의 원인이 될 수 있습니다. 사용을 ==권장하지 않으며 ===대신 사용하십시오.

질문의 세 번째 부분 :

또한

null과 undefined의 차이점은 무엇입니까?

JavaScript에서 한 가지 차이점은 null은 object 유형이고 undefined는 undefined 유형입니다.

JavaScript에서는 null==undefinedtrue이며 type이 무시되면 동일한 것으로 간주됩니다. 왜 그들이 결정했지만 0 ""과 거짓이 같지 않은지 모르겠습니다. 임의의 의견 인 것 같습니다.

JavaScript에서는 null===undefined형식이에서 동일해야하므로 true가 아닙니다 ===.

실제로 null과 undefined는 모두 존재하지 않기 때문에 동일합니다. 따라서 0 ""도 마찬가지 입니다. 빈 컨테이너 []{}. 같은 종류의 많은 것들이 버그의 레시피입니다. 하나의 유형 또는 전혀없는 것이 좋습니다. 가능한 한 적게 사용하려고합니다.

'false', 'true'및 '!' 예를 들어, 간단하게 할 수있는 웜의 또 다른 가방입니다, if(!x)그리고 if(x)혼자 충분합니다, 당신은 진실과 거짓 필요가 없습니다.

선언 된 var x값은 값이 제공되지 않으면 undefined 유형이지만 x가 전혀 선언되지 않은 것과 동일해야합니다. 또 다른 버그 소스는 비어있는 컨테이너입니다. 따라서 같이 선언하고 정의하는 것이 가장 좋습니다 var x=1.

사람들은이 모든 다양한 유형의 아무것도 알아 내려고 애 쓰면서 빙글 빙글 돌고 있지만 복잡한 옷을 입는 것만 똑같습니다. 현실은

undefined===undeclared===null===0===""===[]==={}===nothing

그리고 아마도 모두 예외를 던져야 할 것입니다.


8
좋은 대답이지만, [] : " null과 undefined는 동일합니다. 아마도 빈 컨테이너 []와 {} 일 것입니다 . "{}은 null의 맛이지만, 내 직감은 그렇지 않아야한다는 것입니다. 그러나 논란의 여지 가 없지만 빈 배열 []에는 이해할 수있는 .push()함수 가 있으므로 []가 null이라는 좋은 주장은 없습니다. $ 0.02.
ruffin

11
var x = null;

x는 null로 정의

y는 정의되어 있지 않습니다. // 정의하지 않았기 때문에

if (!x)

null은 거짓으로 평가된다


8

null 및 undefined를 이해하는 한 가지 방법은 각각의 발생 위치를 이해하는 것입니다.

다음 상황에서는 널 리턴 값이 필요합니다.

  • DOM을 쿼리하는 메소드

    console.log(window.document.getElementById("nonExistentElement"));
    //Prints: null
  • Ajax 요청에서받은 JSON 응답


    {
      name: "Bob",
      address: null
    }
  • RegEx.exec .

  • 플럭스 상태에있는 새로운 기능. 다음은 null을 반환합니다.


        var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));

       // But this returns undefined:

        Object.getOwnPropertyDescriptor({}, "a");

존재하지 않는 다른 모든 경우는 정의되지 않은 것으로 표시됩니다 (@Axel로 표시). 다음은 "정의되지 않은"인쇄입니다.

    var uninitalised;
    console.log(uninitalised);

    var obj = {};
    console.log(obj.nonExistent);

    function missingParam(missing){
        console.log(missing);
    }

    missingParam();

    var arr = [];
    console.log(arr.pop());        

당연히 var unitialised = null; 또는 메서드에서 직접 null을 반환하면 다른 상황에서 null이 발생합니다. 그러나 그것은 분명합니다.

세 번째 경우는 변수에 액세스하고 싶지만 선언되었는지조차 모르는 경우입니다. 이 경우 typeof를 사용하여 참조 오류를 피하십시오.

if(typeof unknown !== "undefined"){
    //use unknown
}

요약하면 DOM을 조작하거나 Ajax를 다루거나 특정 ECMAScript 5 기능을 사용할 때 null을 확인하십시오. 다른 모든 경우에 대해 엄격한 평등으로 정의되지 않은 것을 확인하는 것이 안전합니다.

if(value === undefined){
  // stuff
}

8

JavaScript에서 여러 가지 null 검사 비교 :

http://jsfiddle.net/aaronhoffman/DdRHB/5/

// Variables to test
var myNull = null;
var myObject = {};
var myStringEmpty = "";
var myStringWhiteSpace = " ";
var myStringHello = "hello";
var myIntZero = 0;
var myIntOne = 1;
var myBoolTrue = true;
var myBoolFalse = false;
var myUndefined;

...trim...

http://aaron-hoffman.blogspot.com/2013/04/javascript-null-checking-undefined-and.html

JavaScript Null Check 비교 차트


1
"var myUndefined;" 변수를 정의하십시오 (알 수없는 유형의 알려진 변수로)?
제나라 팬

6

null 및 undefined는 값이 같으면 false (null == undefined)입니다. 둘 다 부울 false로 축소됩니다. 그것들은 같은 객체가 아닙니다 (null! == undefined).

undefined는 전역 객체의 속성 (브라우저의 "창")이지만 객체 자체가 아닌 기본 유형입니다. 초기화되지 않은 변수 및 함수는 return 문없이 끝나는 기본값입니다.

null은 Object의 인스턴스입니다. null은 빈 결과를 나타 내기 위해 컬렉션 개체를 반환하는 DOM 메서드에 사용되며 오류를 나타내지 않고 잘못된 값을 제공합니다.


5

일부 정밀도 :

null과 undefined 서로 다른 두 값입니다. 하나는 이름에 대한 값이 없음을 나타내고 다른 하나는 이름이 없음을 나타냅니다.


if다음과 같이 간다 에서 일어나는 일 if( o ):

괄호 o의 표현식이 평가 된 다음 if괄호 안의 표현식 값이 유형에 영향을 미치는 킥이 발생 o합니다.

JavaScript의 Falsy (false로 강제 적용됨) 값은 '', null, undefined, 0 및 false 입니다.


5

의 대답에 추가 할 사이 differrence 무엇 undefinednull 에서, 자바 스크립트 완벽 가이드 6 판,이 페이지 P.41 :

undefined시스템 수준, 예상치 못한 또는 오류와 같은 가치 null결여를 표현하고 프로그램 수준, 정상 또는 예상 가치 결여 를 나타내는 것을 고려할 수 있습니다 . 이러한 값 중 하나를 변수 나 속성에 할당하거나 이러한 값 중 하나를 함수에 전달해야하는 경우 null거의 항상 올바른 선택입니다.


3

null객체입니다. 형식이 null입니다. undefined대상이 아닙니다. 유형이 정의되지 않았습니다.


11
잘못된 - 모두 nullundefined원시 값이다 - typeof null === 'object'인 언어의 버그 때문에Object(null) !== null
크리스토프

전혀 아니다. Object () 캐스트는 이런 식으로 작동합니다. ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf-15.2.2.1 새 객체 ([value]) ... 8. (인수 값 제공되지 않았거나 유형이 Null 또는 Undefined입니다.) 새 기본 ECMAScript 객체를 만듭니다. 새로 생성 된 객체의 [[Prototype]] 속성이 Object 프로토 타입 객체로 설정됩니다. 새로 생성 된 개체의 [[Class]] 속성이 "Object"로 설정되어 있습니다. 새로 구성된 개체에는 [[Value]] 속성이 없습니다. 새롭게 작성된 네이티브 객체를 돌려줍니다.
kentaromiura 2009

3
@ 크리스토프 : 네 말이 맞아. null 유형 이어야 합니다. 내가 의미하는 바는 다음과 같은 이유로 확인할 수 없다는 것입니다. alert (new Object ()! == new Object ()); / * true, 새로운 인스턴스가 동일한 인스턴스가 아닙니다. / alert (Object (null) .constructor == {} .constructor); / spec / alert (Object (null) .prototype == {} .prototype); 과 같이 true spec / alert (null instanceof Object) 에서와 같이 / true ; / 널 수단은 분명히 거짓 인스턴스화하지 * / 그러나 기본적으로 스펙 버그 XD는 볼 수 있습니다 : uselesspickles.com/blog/2006/06/12/...javascript.crockford.com/remedial.html
kentaromiura

2

다음 함수는 왜 그리고 차이점을 해결할 수 있는지 보여줍니다.

function test() {
        var myObj = {};
        console.log(myObj.myProperty);
        myObj.myProperty = null;
        console.log(myObj.myProperty);
}

전화하면

test();

넌 점점

찾으시는 주소가 없습니다

없는

첫 번째 console.log(...)시도는 얻을 myProperty에서 myObj이 아직 정의되지 않은 상태에서 - 그것은 다시 "정의되지 않은"됩니다 있도록. null을 할당 한 후 두 번째 console.log(...)myProperty존재 하기 때문에 "null"을 반환 하지만 값이 null할당되어 있습니다.

순서는이 차이를 조회 할 수 있도록에서 자바 스크립트가 nullundefined:하지만 null입니다 - 그냥 객체 다른 언어처럼 undefined더 예 (도 아닌이 없기 때문에 대상이 될 수 없습니다 null가능한 인스턴스).


2

예를 들어 window.someWeirdProperty정의되지 않았습니다.

"window.someWeirdProperty === null" 동안 거짓으로 평가

"window.someWeirdProperty === undefined" true로 평가됩니다.

또한 checkif는 if (!o)검사와 동일하지 if (o == null)위한 ofalse.


두 조건의 차이점을 자세히 설명해 주
시겠습니까

내 대답을 읽으면, o가 0, false 또는 ""이면 부울 값은 false입니다. var undef, various = [0, "", null, false, undef]; for (다양한 var obj) {alert (! obj); // IE의 경우 4 배, FF의 경우 5 개;)}
kentaromiura

2

undefined와 비교할 때 null에 대한 또 다른 재미있는 점은 증가 할 수 있다는 것입니다.

x = undefined
x++
y = null
y++
console.log(x) // NaN
console.log(y) // 0

카운터의 기본 숫자 값을 설정하는 데 유용합니다. 선언에서 변수를 -1로 몇 번 설정 했습니까?


2

에서 자바 스크립트가 null 아니 어서 object그것은이다 유형 primitave유형입니다.

차이점은 무엇입니까? 정의되지 않음 은 설정되지 않은 포인터를 나타냅니다. 은 널 포인터를 참조합니다. 예를 들어, 변수가 수동으로 유형을 유형으로 설정 한 경우null


2

이것 좀봐:

   <script>
function f(a){
  alert(typeof(a));
  if (a==null) alert('null');
  a?alert(true):alert(false);
}
</script>
                                          //return:
<button onclick="f()">nothing</button>    //undefined    null    false
<button onclick="f(null)">null</button>   //object       null    false
<button onclick="f('')">empty</button>    //string               false
<button onclick="f(0)">zero</button>      //number               false
<button onclick="f(1)">int</button>       //number               true
<button onclick="f('x')">str</button>     //string               true

1

Nicholas C. Zakas의 "객체 지향 자바 스크립트의 원리"에서

그러나 유형이 null 일 때 왜 객체입니까? (실제로 이것은 JavaScript를 설계하고 유지 관리하는위원회 인 TC39에 의해 오류로 인정되었습니다. null이 빈 객체 포인터라고 생각할 수 있습니다. "객체"를 논리적 반환 값으로 만들지 만 여전히 혼란 스럽습니다.)

Zakas, Nicholas C. (2014-02-07). 객체 지향 JavaScript의 원리 (Kindle Locations 226-227). 전분 프레스 없음. 킨들 에디션.

그것은 말했다 :

var game = null; //typeof(game) is "object"

game.score = 100;//null is not an object, what the heck!?
game instanceof Object; //false, so it's not an instance but it's type is object
//let's make this primitive variable an object;
game = {}; 
typeof(game);//it is an object
game instanceof Object; //true, yay!!!
game.score = 100;

정의되지 않은 경우 :

var score; //at this point 'score' is undefined
typeof(score); //'undefined'
var score.player = "felix"; //'undefined' is not an object
score instanceof Object; //false, oh I already knew that.

1

'널 (null)'에 대해 생각하는 가장 좋은 방법은 데이터베이스에 유사한 개념이 어떻게 사용되는지 기억하는 것입니다. 여기서 필드에는 "아무 값도 없음"이 포함되어 있습니다.

  • 그렇습니다, 품목의 가치는 알려져 있습니다; 그것은 되는 '정의.' 그것은 초기화.
  • 항목의 값은 "값이 없습니다"입니다.

이것은보다 쉽게 ​​디버깅되는 프로그램을 작성하는 데 매우 유용한 기술입니다. 에 '정의되지 않은'변수 버그 ...의 원인 일 수 있습니다 (당신이 알고 얼마나?) ...하지만 변수가 값을 포함하는 경우 '널 (null),'당신은이 프로그램이 "사람, 어딘가를 알고 그것을 설정 에 'null.' '따라서 변수 값을 제거해야 할 때 "삭제"하지 말고'null '로 설정하십시오. 이전 값은 고아가되고 곧 가비지 수집됩니다. 새로운 가치는 "현재 가치가 없다"입니다. 두 경우 모두 변수의 상태는 확실합니다. "분명히, 의도적으로 그렇게했습니다."


1
  1. 정의되지 않음은 변수가 선언되었지만 값이 할당되지 않은 반면 Null은 "값 없음"을 나타내는 변수에 할당 될 수 있음을 의미합니다 (Null은 할당 연산자 임)

2. Undefined는 유형 자체이며 Null은 객체입니다.

3. 자바 스크립트는 할당되지 않은 변수를 정의되지 않은 변수로 초기화 할 수 있지만 변수 값을 null로 설정할 수는 없습니다. 프로그래밍 방식으로 수행해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.