> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/documentation/common/permission/clipboard.md).

# 클립보드

{% hint style="info" %}
**권한 설정이 필요해요**

`getClipboardText`를 사용하기 전에 클립보드 권한을 설정해야 해요. 권한 설정 가이드를 먼저 확인해 주세요.
{% endhint %}

***

### 1. 클립보드 텍스트 가져오기

**SDK 함수:** `getClipboardText`

클립보드에 저장된 텍스트를 읽어오는 함수예요.

**시그니처**

```typescript
function getClipboardText(): Promise<string>;
```

**반환값**

* `Promise<string>`

  클립보드에 저장된 텍스트를 반환해요. 클립보드에 텍스트가 없으면 빈 문자열을 반환해요.

**권한 메서드**

* getClipboardText.getPermission

  클립보드 읽기 권한의 현재 상태를 반환해요. `allowed` · `denied` · `notDetermined` · `osPermissionDenied` 중 하나를 반환해요.
* getClipboardText.openPermissionDialog

  클립보드 읽기 권한을 다시 요청하는 다이얼로그를 표시해요. 허용하면 `allowed`, 거부하면 `denied`를 반환해요.

**에러**

권한이 거부된 경우 `GetClipboardTextPermissionError`가 발생해요. `error instanceof GetClipboardTextPermissionError`로 확인할 수 있어요.

```typescript
class GetClipboardTextPermissionError extends PermissionError {
  constructor();
}
```

**예제**

{% tabs %}
{% tab title="Web (JS)" %}

```js
import { getClipboardText, GetClipboardTextPermissionError } from '@apps-in-toss/web-framework';

async function handleGetClipboardText() {
  try {
    const clipboardText = await getClipboardText();
    console.log('클립보드 텍스트:', clipboardText || '클립보드에 텍스트가 없어요.');
  } catch (error) {
    if (error instanceof GetClipboardTextPermissionError) {
      console.log('클립보드 읽기 권한 없음');
    }
  }
}
```

{% endtab %}

{% tab title="Web (React)" %}

```tsx
import { getClipboardText, GetClipboardTextPermissionError } from '@apps-in-toss/web-framework';
import { useState } from 'react';

function PasteButton() {
  const [text, setText] = useState('');

  const handlePress = async () => {
    try {
      const clipboardText = await getClipboardText();
      setText(clipboardText || '클립보드에 텍스트가 없어요.');
    } catch (error) {
      if (error instanceof GetClipboardTextPermissionError) {
        // 클립보드 읽기 권한 없음
      }
    }
  };

  return (
    <div>
      <span>{text}</span>
      <input type="button" value="붙여넣기" onClick={handlePress} />
      <input
        type="button"
        value="권한 확인하기"
        onClick={async () => {
          const permission = await getClipboardText.getPermission();
          alert(permission);
        }}
      />
      <input
        type="button"
        value="권한 요청하기"
        onClick={async () => {
          const permission = await getClipboardText.openPermissionDialog();
          alert(permission);
        }}
      />

  );
}
```

{% endtab %}

{% tab title="React Native" %}

```tsx
import { getClipboardText, GetClipboardTextPermissionError } from '@apps-in-toss/framework';
import { useState } from 'react';
import { Alert, Button, Text, View } from 'react-native';

function PasteButton() {
  const [text, setText] = useState('');

  const handlePress = async () => {
    try {
      const clipboardText = await getClipboardText();
      setText(clipboardText || '클립보드에 텍스트가 없어요.');
    } catch (error) {
      if (error instanceof GetClipboardTextPermissionError) {
        // 클립보드 읽기 권한 없음
      }
    }
  };

  return (
    <View>
      <Text>{text}</Text>
      <Button title="붙여넣기" onPress={handlePress} />
      <Button
        title="권한 확인하기"
        onPress={async () => {
          const permission = await getClipboardText.getPermission();
          Alert.alert(permission);
        }}
      />
      <Button
        title="권한 요청하기"
        onPress={async () => {
          const permission = await getClipboardText.openPermissionDialog();
          Alert.alert(permission);
        }}
      />
    </View>
  );
}
```

{% endtab %}
{% endtabs %}

***

### 2. 클립보드 텍스트 복사하기

**SDK 함수:** `setClipboardText`

텍스트를 클립보드에 복사하는 함수예요. 사용자가 다른 곳에 붙여넣기할 수 있어요.

**시그니처**

```typescript
function setClipboardText(text: string): Promise<void>;
```

**파라미터**

* **text** · 필수 · `string`

  클립보드에 복사할 텍스트예요.

**권한 메서드**

* setClipboardText.getPermission

  클립보드 쓰기 권한의 현재 상태를 반환해요. `allowed` · `denied` · `notDetermined` · `osPermissionDenied` 중 하나를 반환해요.
* setClipboardText.openPermissionDialog

  클립보드 쓰기 권한을 다시 요청하는 다이얼로그를 표시해요. 허용하면 `allowed`, 거부하면 `denied`를 반환해요.

**에러**

권한이 거부된 경우 `SetClipboardTextPermissionError`가 발생해요. `error instanceof SetClipboardTextPermissionError`로 확인할 수 있어요.

```typescript
class SetClipboardTextPermissionError extends PermissionError {
  constructor();
}
```

**예제**

{% tabs %}
{% tab title="Web (JS)" %}

```js
import { setClipboardText, SetClipboardTextPermissionError } from '@apps-in-toss/web-framework';

async function handleSetClipboardText() {
  try {
    await setClipboardText('복사할 텍스트');
    console.log('텍스트가 복사됐어요!');
  } catch (error) {
    if (error instanceof SetClipboardTextPermissionError) {
      console.log('클립보드 쓰기 권한 없음');
    }
  }
}
```

{% endtab %}

{% tab title="Web (React)" %}

```tsx
import { setClipboardText, SetClipboardTextPermissionError } from '@apps-in-toss/web-framework';

function CopyButton() {
  const handleCopy = async () => {
    try {
      await setClipboardText('복사할 텍스트');
      console.log('텍스트가 복사됐어요!');
    } catch (error) {
      if (error instanceof SetClipboardTextPermissionError) {
        // 클립보드 쓰기 권한 없음
      }
    }
  };

  return (
    <>
      <input type="button" value="복사" onClick={handleCopy} />
      <input
        type="button"
        value="권한 확인하기"
        onClick={async () => {
          const permission = await setClipboardText.getPermission();
          alert(permission);
        }}
      />
      <input
        type="button"
        value="권한 요청하기"
        onClick={async () => {
          const permission = await setClipboardText.openPermissionDialog();
          alert(permission);
        }}
      />
    </>
  );
}
```

{% endtab %}

{% tab title="React Native" %}

```tsx
import { setClipboardText, SetClipboardTextPermissionError } from '@apps-in-toss/framework';
import { Alert, Button } from 'react-native';

function CopyButton() {
  const handleCopy = async () => {
    try {
      await setClipboardText('복사할 텍스트');
      console.log('텍스트가 복사됐어요!');
    } catch (error) {
      if (error instanceof SetClipboardTextPermissionError) {
        // 클립보드 쓰기 권한 없음
      }
    }
  };

  return (
    <>
      <Button title="복사" onPress={handleCopy} />
      <Button
        title="권한 확인하기"
        onPress={async () => {
          const permission = await setClipboardText.getPermission();
          Alert.alert(permission);
        }}
      />
      <Button
        title="권한 요청하기"
        onPress={async () => {
          const permission = await setClipboardText.openPermissionDialog();
          Alert.alert(permission);
        }}
      />
    </>
  );
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/documentation/common/permission/clipboard.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
