์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ๋ฅผ ์ง์ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ ค๋ฉด ์ค์ (settings) ์ผ๋ก ๋ ธ์ถํ ์ ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค ๐

ํ๋ฌ๊ทธ์ธ์ ์ค์ ์ ์ถ๊ฐํ๋ ์ฃผ๋ ์ด์ ๋ ์ฌ์ฉ์๊ฐ Obsidian์ ์ข ๋ฃํ ํ์๋ ์ ์ง๋๋ ๊ตฌ์ฑ์ ์ ์ฅํ๊ธฐ ์ํจ์ ๋๋ค. ๋ค์ ์์ ๋ ๋์คํฌ์์ ์ค์ ์ ์ ์ฅํ๊ณ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค:
import { Plugin } from 'obsidian';
import { ExampleSettingTab } from './settings';
interface ExamplePluginSettings {
dateFormat: string;
}
const DEFAULT_SETTINGS: Partial<ExamplePluginSettings> = {
dateFormat: 'YYYY-MM-DD',
};
export default class ExamplePlugin extends Plugin {
settings: ExamplePluginSettings;
async onload() {
await this.loadSettings();
this.addSettingTab(new ExampleSettingTab(this.app, this));
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
}์ค์ ์ ์ค์ฒฉ๋ ์์ฑ
Object.assign()์ ์ค์ฒฉ๋ ์์ฑ์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค(์์ ๋ณต์ฌ). ์ค์ ๊ฐ์ฒด์ ์ค์ฒฉ๋ ์์ฑ์ด ํฌํจ๋ ๊ฒฝ์ฐ, ๊ฐ ์ค์ฒฉ๋ ์์ฑ์ ์ฌ๊ท์ ์ผ๋ก ๋ณต์ฌํด์ผ ํฉ๋๋ค(๊น์ ๋ณต์ฌ). ๊ทธ๋ ์ง ์์ผ๋ฉด ์ค์ฒฉ๋ ์์ฑ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ดObject.assign()์ ์ฌ์ฉํ์ฌ ๋ณต์ฌ๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ฉ๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋ง์ ๋ด์ฉ์ด ์์ผ๋ ๐คฏ, ๊ฐ ๋ถ๋ถ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ค์ ์ ์ ์์ฑํ๊ธฐ
๋จผ์ , ์ฌ์ฉ์๊ฐ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ ค๋ ์ค์ ์ ๋ํ ์ ์ ExamplePluginSettings๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ํ์ฑํ๋์ด ์๋ ๋์ settings ๋ฉค๋ฒ ๋ณ์์์ ์ค์ ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
interface ExamplePluginSettings {
dateFormat: string;
}
export default class ExamplePlugin extends Plugin {
settings: ExamplePluginSettings;
// ...
}์ค์ ๊ฐ์ฒด ์ ์ฅ ๋ฐ ๋ก๋ํ๊ธฐ
loadData() ๋ฐ saveData()๋ ๋์คํฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด ์์ ๋ ๋ํ ํ๋ฌ๊ทธ์ธ์ ๋ค๋ฅธ ๋ถ๋ถ์์ loadData() ๋ฐ saveData()๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ ๊ฐ์ง ํฌํผ ๋ฉ์๋๋ฅผ ์๊ฐํฉ๋๋ค.
export default class ExamplePlugin extends Plugin {
// ...
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
}๋ง์ง๋ง์ผ๋ก, ํ๋ฌ๊ทธ์ธ์ด ๋ก๋๋ ๋ ์ค์ ์ ๋ก๋ํด์ผ ํฉ๋๋ค:
async onload() {
await this.loadSettings();
// ...
}๊ธฐ๋ณธ๊ฐ ์ ๊ณตํ๊ธฐ
์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ฒ์ ํ์ฑํํ๋ฉด ์ค์ ์ด ์์ง ๊ตฌ์ฑ๋์ง ์์์ต๋๋ค. ์์ ์์ ๋ ๋๋ฝ๋ ์ค์ ์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ ์ํด ๋ค์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
Object.assign({}, DEFAULT_SETTINGS, await this.loadData())Object.assign()์ ํ ๊ฐ์ฒด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋ชจ๋ ์์ฑ์ ๋ณต์ฌํ๋ JavaScript ํจ์์
๋๋ค. loadData()์์ ๋ฐํ๋ ๋ชจ๋ ์์ฑ์ DEFAULT_SETTINGS์ ์์ฑ์ ๋ฎ์ด์๋๋ค.
const DEFAULT_SETTINGS: Partial<ExamplePluginSettings> = {
dateFormat: 'YYYY-MM-DD',
};Tip
Partial<Type>์Type์ ๋ชจ๋ ์์ฑ์ ์ ํ์ ์ผ๋ก ์ค์ ํ ํ์ ์ ๋ฐํํ๋ TypeScript ์ ํธ๋ฆฌํฐ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ ค๋ ์์ฑ๋ง ์ ์ํ๋ฉด์ ํ์ ๊ฒ์ฌ๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค.
์ค์ ํญ ๋ฑ๋กํ๊ธฐ
์ด์ ํ๋ฌ๊ทธ์ธ์ ํ๋ฌ๊ทธ์ธ ๊ตฌ์ฑ์ ์ ์ฅํ๊ณ ๋ก๋ํ ์ ์์ง๋ง, ์ฌ์ฉ์๋ ์์ง ์ค์ ์ ๋ณ๊ฒฝํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ค์ ํญ์ ์ถ๊ฐํ๋ฉด ์ฌ์ฉ์๊ฐ ํ๋ฌ๊ทธ์ธ ์ค์ ์ ์ ๋ฐ์ดํธํ ์ ์๋ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค:
this.addSettingTab(new ExampleSettingTab(this.app, this));์ฌ๊ธฐ์ ExampleSettingTab์ PluginSettingTab์ ํ์ฅํ๋ ํด๋์ค์
๋๋ค:
import ExamplePlugin from './main';
import { App, PluginSettingTab, Setting } from 'obsidian';
export class ExampleSettingTab extends PluginSettingTab {
plugin: ExamplePlugin;
constructor(app: App, plugin: ExamplePlugin) {
super(app, plugin);
this.plugin = plugin;
}
display(): void {
let { containerEl } = this;
containerEl.empty();
new Setting(containerEl)
.setName('Date format')
.setDesc('Default date format')
.addText((text) =>
text
.setPlaceholder('MMMM dd, yyyy')
.setValue(this.plugin.settings.dateFormat)
.onChange(async (value) => {
this.plugin.settings.dateFormat = value;
await this.plugin.saveSettings();
})
);
}
}display()๋ ์ค์ ํญ์ ๋ด์ฉ์ ๋น๋ํ๋ ๊ณณ์
๋๋ค. ์์ธํ ๋ด์ฉ์ HTML elements๋ฅผ ์ฐธ์กฐํ์ธ์.
new Setting(containerEl)์ ์ปจํ
์ด๋ ์์์ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์์ ๋ addText()๋ฅผ ์ฌ์ฉํ์ฌ ํ
์คํธ ํ๋๋ฅผ ์ฌ์ฉํ์ง๋ง, ๋ค๋ฅธ ์ฌ๋ฌ ์ค์ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ ์คํธ ํ๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ค์ ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ ๋ค์ ๋์คํฌ์ ์ ์ฅํฉ๋๋ค:
.onChange(async (value) => {
this.plugin.settings.dateFormat = value;
await this.plugin.saveSettings();
})์ํ์ต๋๋ค! ๐ช ์ฌ์ฉ์๋ค์ ํ๋ฌ๊ทธ์ธ๊ณผ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํด ์ค ๊ฒ์ ๋ํด ๊ฐ์ฌํ ๊ฒ์ ๋๋ค. ๋ค์ ๊ฐ์ด๋๋ก ๋์ด๊ฐ๊ธฐ ์ ์, ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๋ค๋ฅธ ์ค์ ์ ์ถ๊ฐํ์ฌ ์คํํด๋ณด์ธ์.