SlideShare a Scribd company logo
디자인 패턴 
옵저버 패턴과 비지터 패턴에 대해서…
옵저버 패턴(Observer Pattern)
옵저버 패턴(Observer Pattern)이란? 
 한 객체(Subject)의 상태가 바뀌면 그 객체에 의존하는 다른 객체들(Observers) 
에게 연락이 가고 자동으로 내용이 갱신되는 일대다(one-to-many)방식의 패턴
 그림과 같이 어떤 정보가 갱신 되었을 때 Subject에 해당되는 객체가 Observer 
들에게 정보를 전달해주고 있다. 
 그리고 데이터의 주체는 Subject임을 통해서 여러 객체의 데이터에 각각 접근할 
때보다 더 깔끔한 객체 프로그래밍을 할 수 있다. 
 이러한 디자인 패턴을 통해 두 객체 사이에서의 관계를 느슨하게 만들 수 있다. 
여기서 느슨함이란 객체간의 상호작용은 이루어지지만 서로에 대해 잘 몰라도 
된다는 것을 의미한다. 예를 들어 Subject를 변경해도 Observer엔 영향을 끼치 
지 않을 것이고 그 반대의 경우도 동일하다.
예제를 봅시다 
옵저버 패턴을 구현하기 위해 
Observer에는 여러 가지가 들어갈 수 
있는 것을 생각하여 미리 Observer라는 
인터페이스를 생성하여 이것을 
상속받도록 하였다.
Subject는 제 각각의 Observer의 
정보를 알 필요가 없다. 그렇기 때문에 
Subject는 공통으로 사용 될 
인터페이스와 Observer등록,해제 
함수만을 가지고 있으면 된다.
결과…
옵저버 패턴의 핵심 
 느슨함 
 앞에서도 한번 언급했듯이 옵저버 패턴의 특징 중 하나는 ‘느슨함’ 이라는 것이 
다. 이를 통해서 얻을 수 있는 장점이 여러 가지가 있다. 
1. Observer를 언제든지 새로 추가할 수 있다. 
2. 새로운 형식의 Observer가 와도 Subject는 바꾸지 않아도 된다. 
3. Subject와 Observer는 각각 독립적으로 재사용이 가능하다. 
4. 도중에 Subject나 Observer의 특징이 바뀌더라도 서로에게 영향을 끼치지 않 
는 것이다.
비지터 패턴(Visitor Pattern)
비지터 패턴(Visiter Pattern)이란? 
 기존의 OOP(객체 지향 프로그래밍)에서는 객체가 자신의 오퍼레이션을 가지고 
있던 반면에 ‘비지터 패턴’ 에서는 객체의 구조와 기능을 분리 시키는 패턴이다. 
 객체의 구조는 변하지 않으나 기능만을 따로 추가하거나 확장시켜야 할 때 주로 
사용되는 패턴이다. 
 이러한 특징으로 인해 다소 NON-OOP적인 특성을 가진다. 하지만 이 패턴을 통 
해 OOP는 오히려 더 유연해진다.
도대체 이걸 언제 사용한다는 건가? 
 객체의 구조는 이미 다 짜여져 있는데 그 객체에 들어있는 오퍼레이션에 대해 정 
확하겐 알고 있지 않기 때문에, 적용되어야 하는 오퍼레이션이 정해져 있지 않 
으므로 그 객체에 오퍼레이션을 둘 수 없다는 것이다. 
 바로 이러한 상황에서 적용시켜야 할 오퍼레이션을 가지고 있는 것이 Visitor 그 
리고 기존의 선언되어있던 객체를 Element라고 한다. 
 Element에 적용되어야 할 메소드가 Visitor에게 정의되어 있을 것이니 Element 
가 Visitor에 정의되어있는 메소드를 사용할 때 Element에게 Visitor를 넘겨주면 
되는 것이다.  비지터 패턴
예제를 봅시다 
 기존의 객체로 Element에 해당되는 Color 
추상 클래스를 선언한다. 
 Element에 해당되는 부분으로 Visitor메소 
드를 호출 할 때 Visitor를 받기 위한 함수로 
accep함수를 만들었다.
 CountVisitor 클래스를 
통해 Element가 accep 
했을 때 각 visit함수가 
몇 번 호출되었는지를 
센다. 
 CallVisitor클래스를 통 
해 기존의 Element내부 
에 있는 다른 객체에서 
Visitor를 accept 했을 
때 해당 visit을 호출하 
여 메소드를 호출하는 
구성이다.
결과…
비지터 패턴의 핵심 
비-객체지향에서 오는 유연함 
 기존의 객체가 가지고 있어야 할 오퍼레이션을 다른 객체에서 호출한다는 것은 
흔히 c++이나 java에서 OOP(객체 지향 프로그래밍)를 경험한 사람들에게는 좀 
낯선 유형일 것이다. 
 비지터 패턴을 통해 기존의 객체에서 추가하고픈 혹은 자주 변경 될듯한 메소드 
가 존재할 때 해당 Visitor가 함수를 호출하는 패턴을 사용한다면 Visitor를 변경 
해 주는 것으로도 메소드를 확장 혹은 추가하는 것이 가능해진다.
감사합니다. 
 사실 저도 작성해보면서 느낀건 
비지터 패턴은 좀 난해합니다…

More Related Content

What's hot

Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
Park Jonggun
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
Yeonah Ki
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
MIN SEOK KOO
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
Nam Hyeonuk
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
대영 노
 
Effective c++chapter8
Effective c++chapter8Effective c++chapter8
Effective c++chapter8
성연 김
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
성연 김
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
Dong Chan Shin
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
민태 김
 
Std bind
Std bindStd bind
Std bind
문익 장
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
성연 김
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
Injae Lee
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
Yong Joon Moon
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
민태 김
 
Scala block expression
Scala block expressionScala block expression
Scala block expression
Yong Joon Moon
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
quxn6
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
Changwon National University
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
성연 김
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
Lee Dong Wook
 

What's hot (20)

Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
Effective c++chapter8
Effective c++chapter8Effective c++chapter8
Effective c++chapter8
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
외계어 스터디 3/5 function and object
외계어 스터디 3/5   function and object외계어 스터디 3/5   function and object
외계어 스터디 3/5 function and object
 
Std bind
Std bindStd bind
Std bind
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
Scala block expression
Scala block expressionScala block expression
Scala block expression
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
Effective c++chapter3
Effective c++chapter3Effective c++chapter3
Effective c++chapter3
 
자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스자바스크립트 프로토타입 및 클래스
자바스크립트 프로토타입 및 클래스
 

Viewers also liked

디자인패턴
디자인패턴디자인패턴
디자인패턴
진화 손
 
GoF의 디자인 패턴
GoF의 디자인 패턴GoF의 디자인 패턴
GoF의 디자인 패턴
Ashal aka JOKER
 
클린코드 17장
클린코드 17장클린코드 17장
클린코드 17장
진화 손
 
핵심 프로세스 모델링 하기
핵심 프로세스 모델링 하기핵심 프로세스 모델링 하기
핵심 프로세스 모델링 하기
ROA Invention LAB Inc. CEO
 
1장 디자인 패턴 소개
1장 디자인 패턴 소개1장 디자인 패턴 소개
1장 디자인 패턴 소개
citylock
 
Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포
Jongwon Lee
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Dong Chan Shin
 
디자인 패턴
디자인 패턴디자인 패턴
디자인 패턴
수빈 박
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
YoungSu Son
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 

Viewers also liked (12)

디자인패턴
디자인패턴디자인패턴
디자인패턴
 
GoF의 디자인 패턴
GoF의 디자인 패턴GoF의 디자인 패턴
GoF의 디자인 패턴
 
클린코드 17장
클린코드 17장클린코드 17장
클린코드 17장
 
핵심 프로세스 모델링 하기
핵심 프로세스 모델링 하기핵심 프로세스 모델링 하기
핵심 프로세스 모델링 하기
 
1장 디자인 패턴 소개
1장 디자인 패턴 소개1장 디자인 패턴 소개
1장 디자인 패턴 소개
 
Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포Istqb 4-테스트설계기법-2015-3-배포
Istqb 4-테스트설계기법-2015-3-배포
 
Ch7 bpmn
Ch7 bpmnCh7 bpmn
Ch7 bpmn
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
디자인 패턴
디자인 패턴디자인 패턴
디자인 패턴
 
SW 아키텍처 분석방법
SW 아키텍처 분석방법 SW 아키텍처 분석방법
SW 아키텍처 분석방법
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 

Similar to 디자인 패턴(Observer, visitor)

디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
Shin heemin
 
3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx
ssuser642b19
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
ChangHyeon Bae
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
jaypi Ko
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계Eb Styles
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task운용 최
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
HeechanLee6
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
AnselmKim
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
Injae Lee
 

Similar to 디자인 패턴(Observer, visitor) (9)

디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx3팀_객체지향 프로그래밍.pptx
3팀_객체지향 프로그래밍.pptx
 
OOP - Object Oriendted Programing
OOP - Object Oriendted ProgramingOOP - Object Oriendted Programing
OOP - Object Oriendted Programing
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계보다 나은 웹 어플리케이션 설계
보다 나은 웹 어플리케이션 설계
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task
 
객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고객체지향이란? - <객체지향의 사실과 오해>를 읽고
객체지향이란? - <객체지향의 사실과 오해>를 읽고
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 

More from 세빈 정

Gpg study3.7
Gpg study3.7Gpg study3.7
Gpg study3.7
세빈 정
 
Gpg study1.8
Gpg study1.8Gpg study1.8
Gpg study1.8
세빈 정
 
Effective c++ Chapter6
Effective c++ Chapter6Effective c++ Chapter6
Effective c++ Chapter6
세빈 정
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
세빈 정
 
소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
세빈 정
 
Pac-man
Pac-manPac-man
Pac-man
세빈 정
 
포스트모템1
포스트모템1포스트모템1
포스트모템1세빈 정
 

More from 세빈 정 (7)

Gpg study3.7
Gpg study3.7Gpg study3.7
Gpg study3.7
 
Gpg study1.8
Gpg study1.8Gpg study1.8
Gpg study1.8
 
Effective c++ Chapter6
Effective c++ Chapter6Effective c++ Chapter6
Effective c++ Chapter6
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
 
Pac-man
Pac-manPac-man
Pac-man
 
포스트모템1
포스트모템1포스트모템1
포스트모템1
 

디자인 패턴(Observer, visitor)

  • 1. 디자인 패턴 옵저버 패턴과 비지터 패턴에 대해서…
  • 3. 옵저버 패턴(Observer Pattern)이란?  한 객체(Subject)의 상태가 바뀌면 그 객체에 의존하는 다른 객체들(Observers) 에게 연락이 가고 자동으로 내용이 갱신되는 일대다(one-to-many)방식의 패턴
  • 4.  그림과 같이 어떤 정보가 갱신 되었을 때 Subject에 해당되는 객체가 Observer 들에게 정보를 전달해주고 있다.  그리고 데이터의 주체는 Subject임을 통해서 여러 객체의 데이터에 각각 접근할 때보다 더 깔끔한 객체 프로그래밍을 할 수 있다.  이러한 디자인 패턴을 통해 두 객체 사이에서의 관계를 느슨하게 만들 수 있다. 여기서 느슨함이란 객체간의 상호작용은 이루어지지만 서로에 대해 잘 몰라도 된다는 것을 의미한다. 예를 들어 Subject를 변경해도 Observer엔 영향을 끼치 지 않을 것이고 그 반대의 경우도 동일하다.
  • 5. 예제를 봅시다 옵저버 패턴을 구현하기 위해 Observer에는 여러 가지가 들어갈 수 있는 것을 생각하여 미리 Observer라는 인터페이스를 생성하여 이것을 상속받도록 하였다.
  • 6. Subject는 제 각각의 Observer의 정보를 알 필요가 없다. 그렇기 때문에 Subject는 공통으로 사용 될 인터페이스와 Observer등록,해제 함수만을 가지고 있으면 된다.
  • 8. 옵저버 패턴의 핵심  느슨함  앞에서도 한번 언급했듯이 옵저버 패턴의 특징 중 하나는 ‘느슨함’ 이라는 것이 다. 이를 통해서 얻을 수 있는 장점이 여러 가지가 있다. 1. Observer를 언제든지 새로 추가할 수 있다. 2. 새로운 형식의 Observer가 와도 Subject는 바꾸지 않아도 된다. 3. Subject와 Observer는 각각 독립적으로 재사용이 가능하다. 4. 도중에 Subject나 Observer의 특징이 바뀌더라도 서로에게 영향을 끼치지 않 는 것이다.
  • 10. 비지터 패턴(Visiter Pattern)이란?  기존의 OOP(객체 지향 프로그래밍)에서는 객체가 자신의 오퍼레이션을 가지고 있던 반면에 ‘비지터 패턴’ 에서는 객체의 구조와 기능을 분리 시키는 패턴이다.  객체의 구조는 변하지 않으나 기능만을 따로 추가하거나 확장시켜야 할 때 주로 사용되는 패턴이다.  이러한 특징으로 인해 다소 NON-OOP적인 특성을 가진다. 하지만 이 패턴을 통 해 OOP는 오히려 더 유연해진다.
  • 11. 도대체 이걸 언제 사용한다는 건가?  객체의 구조는 이미 다 짜여져 있는데 그 객체에 들어있는 오퍼레이션에 대해 정 확하겐 알고 있지 않기 때문에, 적용되어야 하는 오퍼레이션이 정해져 있지 않 으므로 그 객체에 오퍼레이션을 둘 수 없다는 것이다.  바로 이러한 상황에서 적용시켜야 할 오퍼레이션을 가지고 있는 것이 Visitor 그 리고 기존의 선언되어있던 객체를 Element라고 한다.  Element에 적용되어야 할 메소드가 Visitor에게 정의되어 있을 것이니 Element 가 Visitor에 정의되어있는 메소드를 사용할 때 Element에게 Visitor를 넘겨주면 되는 것이다.  비지터 패턴
  • 12. 예제를 봅시다  기존의 객체로 Element에 해당되는 Color 추상 클래스를 선언한다.  Element에 해당되는 부분으로 Visitor메소 드를 호출 할 때 Visitor를 받기 위한 함수로 accep함수를 만들었다.
  • 13.  CountVisitor 클래스를 통해 Element가 accep 했을 때 각 visit함수가 몇 번 호출되었는지를 센다.  CallVisitor클래스를 통 해 기존의 Element내부 에 있는 다른 객체에서 Visitor를 accept 했을 때 해당 visit을 호출하 여 메소드를 호출하는 구성이다.
  • 15. 비지터 패턴의 핵심 비-객체지향에서 오는 유연함  기존의 객체가 가지고 있어야 할 오퍼레이션을 다른 객체에서 호출한다는 것은 흔히 c++이나 java에서 OOP(객체 지향 프로그래밍)를 경험한 사람들에게는 좀 낯선 유형일 것이다.  비지터 패턴을 통해 기존의 객체에서 추가하고픈 혹은 자주 변경 될듯한 메소드 가 존재할 때 해당 Visitor가 함수를 호출하는 패턴을 사용한다면 Visitor를 변경 해 주는 것으로도 메소드를 확장 혹은 추가하는 것이 가능해진다.
  • 16. 감사합니다.  사실 저도 작성해보면서 느낀건 비지터 패턴은 좀 난해합니다…