Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2683e75
feat: 1์ฃผ์ฐจ ๋ฏธ์…˜ ์™„๋ฃŒ
yoons-art Mar 25, 2026
0b094f9
chore: ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์น˜ ๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜
yoons-art Mar 25, 2026
1de7484
3์ฃผ์ฐจ ๋ฏธ์…˜1์™„๋ฃŒ
yoons-art Mar 31, 2026
c37a910
feat: 3์ฃผ์ฐจ ๋ฏธ์…˜ 2 ์ž„์‹œ ์ €์žฅ
yoons-art Apr 1, 2026
1bbd868
Merge pull request #8 from SWU-UMC/week1/celine-m1
yewon20804 Apr 1, 2026
4e4eac3
feat: week3 mission2
yoons-art Apr 1, 2026
86d9506
feat: week3/celine Mission 3
yoons-art Apr 2, 2026
3e59f39
Merge branch 'celine' into week3/celine-m2
yoons-art Apr 6, 2026
cff4079
chore: ํด๋”๊ตฌ์กฐ๊ฐœ์„ 
yoons-art Apr 6, 2026
1642859
Merge branch 'celine' into week3/celine-m3
yoons-art Apr 6, 2026
1bccb12
chore: ํด๋”๊ตฌ์กฐ๊ฐœ์„ 
yoons-art Apr 6, 2026
76424bc
feat: 1์ฃผ์ฐจ ์‹ค์Šต ๋‚ด์šฉ ์ถ”๊ฐ€
yoons-art Apr 6, 2026
6abd9fd
feat : 4์ฃผ์ฐจ mission 2
yoons-art Apr 9, 2026
6d3a427
feat: 4์ฃผ์ฐจ mission 3
yoons-art Apr 12, 2026
9098f71
fix: ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ๋ฐ ์ฝ”๋“œ ์ตœ์ ํ™”
yoons-art Apr 29, 2026
c5f35f1
chore: ์˜์กด์„ฑ ํŒŒ์ผ ์‚ญ์ œ
yoons-art Apr 29, 2026
709c49c
Merge pull request #25 from SWU-UMC/week3/celine-m2
yewon20804 Apr 29, 2026
f35c92d
Merge branch 'celine' into week3/celine-m3
yoons-art Apr 29, 2026
a132768
Merge pull request #29 from SWU-UMC/week3/celine-m3
yewon20804 Apr 29, 2026
b74664b
Merge branch 'celine' into week4/celine-m2
yoons-art Apr 29, 2026
79a2f0a
chore: envํŒŒ์ผ ์‚ญ์ œ
yoons-art Apr 29, 2026
f9c64b4
Merge pull request #41 from SWU-UMC/week4/celine-m2
yewon20804 Apr 29, 2026
8d096cd
Merge branch 'celine' into week4/celine-m3
yoons-art Apr 29, 2026
e269d21
chore: env ํŒŒ์ผ ์‚ญ์ œ
yoons-art Apr 29, 2026
9a963bb
Merge pull request #42 from SWU-UMC/week4/celine-m3
yewon20804 Apr 29, 2026
33039bf
feat: 5์ฃผ์ฐจ ๋ฏธ์…˜ 1
yoons-art May 3, 2026
a0358c0
feat : 5์ฃผ์ฐจ ๋ฏธ์…˜3
yoons-art May 5, 2026
8283186
feat: 6์ฃผ์ฐจ ๋ฏธ์…˜1
yoons-art May 10, 2026
b69bd62
feat: 6์ฃผ์ฐจ ๋ฏธ์…˜2
yoons-art May 11, 2026
a3e9dc5
feat : 7์ฃผ์ฐจ ๋ฏธ์…˜1
yoons-art May 17, 2026
9f3ca50
feat: 7์ฃผ์ฐจ ๋ฏธ์…˜2
yoons-art May 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions week1/yoonTOdo/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"use strict";
const todoInput = document.getElementById('todo-input');
const todoForm = document.getElementById('todo-form');
const todoList = document.getElementById('todo-list');
const doneList = document.getElementById('done-list');
let todos = [];
let doneTasks = [];
const renderTasks = () => {
todoList.innerHTML = '';
doneList.innerHTML = '';
todos.forEach((todo) => {
const li = createTodoElement(todo, false);
todoList.appendChild(li);
});
doneTasks.forEach((todo) => {
const li = createTodoElement(todo, true);
doneList.appendChild(li);
});
};
const getTodoText = () => {
return todoInput.value.trim();
};
const addTodo = (text) => {
todos.push({ id: Date.now(), text });
todoInput.value = '';
renderTasks();
};
const completeTodo = (todo) => {
todos = todos.filter((t) => t.id !== todo.id);
doneTasks.push(todo);
renderTasks();
};
const deleteTodo = (todo) => {
doneTasks = doneTasks.filter((t) => t.id !== todo.id);
renderTasks();
};
const createTodoElement = (todo, isDone) => {
const li = document.createElement('li');
li.classList.add('render-container__item');
li.textContent = todo.text;
const button = document.createElement('button');
button.classList.add('render-container__item-button');
if (isDone) {
button.textContent = '์‚ญ์ œ';
button.style.backgroundColor = '#dc3545';
}
else {
button.textContent = '์™„๋ฃŒ';
button.style.backgroundColor = '#28a745';
}
button.addEventListener('click', () => {
if (isDone) {
deleteTodo(todo);
}
else {
completeTodo(todo);
}
});
li.appendChild(button);
return li;
};
todoForm.addEventListener('submit', (event) => {
event.preventDefault();
const text = getTodoText();
if (text) {
addTodo(text);
}
});
renderTasks();
89 changes: 89 additions & 0 deletions week1/yoonTOdo/src/script.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
//1. HTML ์š”์†Œ ์„ ํƒ
const todoInput= document.getElementById('todo-input') as HTMLInputElement;
const todoForm = document.getElementById('todo-form') as HTMLFormElement;
const todoList = document.getElementById('todo-list') as HTMLUListElement;
const doneList = document.getElementById('done-list') as HTMLUListElement;

//2. ํ• ์ผ์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธด ์• ์ธ์ง€ TYPE ์ •์˜
type Todo ={
id : number;
text: string;
};

let todos: Todo[] =[];
let doneTasks: Todo[] =[];

//- ํ• ์ผ ๋ชฉ๋ก ๋ Œ๋”๋ง ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜
const renderTasks =():void =>{
todoList.innerHTML ='';
doneList.innerHTML ='';

todos.forEach((todo): void =>{
const li = createTodoElement(todo,false);
todoList.appendChild(li);
});

doneTasks.forEach((todo):void =>{
const li = createTodoElement(todo,true);
doneList.appendChild(li);
})
};
//3. ํ• ์ผ ํ…์ŠคํŠธ ์ž…๋ ฅ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜(๊ณต๋ฐฑ ์ œ์™ธ์‹œ์ผœ์คŒ)
const getTodoText = ():string => {
return todoInput.value.trim();
};
//4. ํ• ์ผ ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜
const addTodo = (text: string) : void =>{
todos.push({id: Date.now(), text});
todoInput.value = '';
renderTasks();
};
//5. ํ• ์ผ ์ƒํƒœ ๋ณ€๊ฒฝ(์™„๋ฃŒ๋กœ ์ด๋™)
const completeTodo = (todo: Todo):void=>{
todos = todos.filter((t):boolean=>t.id !== todo.id);
doneTasks.push(todo);
renderTasks();
};
//6. ์˜จ๋ฃŒ๋œ ํ• ์ผ ์‚ญ์ œ ํ•จ์ˆ˜
const deleteTodo =(todo:Todo):void =>{
doneTasks = doneTasks.filter((t):boolean => t.id !==todo.id);
renderTasks();
};
//7. ํ• ์ผ ์•„์ดํ…œ ์ƒ์„ฑ ํ•จ์ˆ˜(์™„๋ฃŒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฒ„ํŠผ ํ…์ŠคํŠธ๋‚˜ ์ƒ‰์ƒ ์„ค์ •)
const createTodoElement = (todo: Todo, isDone:boolean):HTMLLIElement =>{
const li = document.createElement('li');
li.classList.add('render-container__item');
li.textContent = todo.text;

const button = document.createElement('button');
button.classList.add('render-container__item-button');

if(isDone){
button.textContent = '์‚ญ์ œ';
button.style.backgroundColor = '#dc3545';
}else{
button.textContent = '์™„๋ฃŒ';
button.style.backgroundColor = '#28a745';
}
button.addEventListener('click',():void => {
if(isDone){
deleteTodo(todo);
}else{
completeTodo(todo);
}
});

li.appendChild(button);
return li;
};

//8. ํผ ์ œ์ถœ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ
todoForm.addEventListener('submit',(event: Event):void=>{
event.preventDefault();
const text = getTodoText();
if(text){
addTodo(text);
}
});

renderTasks();
100 changes: 100 additions & 0 deletions week1/yoonTOdo/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
*{
margin :0;
padding:0;
box-sizing : border-box;
}
body {
font-family: "Roboto", sans-serif;
display: flex;
justify-content: center;
align-items: center;
background-color: #f1f1f1;

}
.todo-container{
background: white;
padding: 20px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
width: 350px;
text-align: center;

}
.todo-container__header{
font-size: 24px;
margin-bottom: 16px;
}
.todo-container__form{
display: flex;
gap: 10px;
margin-bottom: 20px;
}
.todo-container__input{
flex: 1;
padding: 8px;
border: 1px solid #ccc;
border-radius: 6px;
font-size: 14px;
}

.todo-container__button{
background-color: #28a745;
color: white;
border: none;
padding: 8px 12px;
cursor: pointer;
border-radius: 6px;
transition: background-color 0.3s ease;
}
.todo-container__button:hover {
background-color: #218838;
}
.render-container{
display: flex;
justify-content: space-between;
gap: 20px;
}
.render-container__title{
font-size: 18px;
margin-bottom: 10px;

display: flex;
justify-content: center;
}
.render-container__list{
list-style: none;
padding: 0;
margin: 0;

}
.render-container__item{
display: flex;
justify-content: space-between;
align-items: center;

padding: 8px;
border-bottom: 1px solid #ddd;
background-color: #f9f9f9;
border-radius: 6px;
margin-bottom: 6px;
width: 100%;

}
.render-container__item-text{
flex: 1;

}
.render-container__item-button{
background-color: #dc3545;
color: white;
border: none;
padding: 6px 10px;
cursor: pointer;
border-radius: 6px;
font-size: 12px;
transition: background-color 0.3s ease;
}

.render-container__item-button:hover{
background-color: #c82333;
}
19 changes: 19 additions & 0 deletions week1/yoonTOdo/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es2016", // ECMAScript 2016์œผ๋กœ ์ปดํŒŒ์ผ
"module": "ES2015", // ES2015 ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ์‚ฌ์šฉ
"rootDir": "./src", // ์†Œ์Šค ํŒŒ์ผ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ
"outDir": "./dist", // ์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์ด ์ €์žฅ๋  ๋””๋ ‰ํ† ๋ฆฌ
"esModuleInterop": true, // ES ๋ชจ๋“ˆ ํ˜ธํ™˜์„ฑ ์„ค์ •
"forceConsistentCasingInFileNames": true, // ํŒŒ์ผ ์ด๋ฆ„์˜ ๋Œ€์†Œ๋ฌธ์ž ์ผ๊ด€์„ฑ ๊ฐ•์ œ
"strict": true, // ์—„๊ฒฉํ•œ ํƒ€์ž… ๊ฒ€์‚ฌ
"skipLibCheck": true, // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ ๊ฒ€์‚ฌ ๊ฑด๋„ˆ๋œ€
"removeComments": true, // ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ์—์„œ ์ฃผ์„ ์ œ๊ฑฐ
"noEmitOnError": false, // ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ํŒŒ์ผ ์ƒ์„ฑ ์•ˆ ํ•จ
"noUnusedLocals": true, // ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์—๋Ÿฌ ๋ฐœ์ƒ
"noUnusedParameters": true, // ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์—๋Ÿฌ ๋ฐœ์ƒ
"noImplicitReturns": true, // ํ•จ์ˆ˜์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฐœ์ƒ
"noFallthroughCasesInSwitch": true, // switch ๋ฌธ์—์„œ fallthrough ๋ฐฉ์ง€
"noUncheckedIndexedAccess": true // ์ธ๋ฑ์Šค ์ ‘๊ทผ ์‹œ ์ฒดํฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฐœ์ƒ
}
}
41 changes: 41 additions & 0 deletions week1/yoonTOdo/yoonTodo.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel ="stylesheet" href = "./style.css"/>
<script type ="module" src="./script.js" defer></script>
<title>YOON TODO</title>
</head>


<body>
<div class = "todo-container">
<h1 class = "todo-container__header">Yoon TODO </h1>
<form id ="todo-form" class ="todo-container__form">
<input
type ="text"
id="todo-input"
class="todo-container_input"
placeholder="ํ•  ์ผ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”"
required
/>
<button type ="submit" class = "todo-container__button"> ํ• ์ผ ์ถ”๊ฐ€ </button>
</form>
<div class = "render-container">
<div class="render-container__section">
<h2 class="render-container__title">ํ•  ์ผ</h2>
<ul id = "todo-list" class = "render-container__list"></ul>
</div>
<div class="render-container__section">
<h2 class="render-container__title">์™„๋ฃŒ</h2>
<ul id = "done-list" class = "render-container__list">
<li class="render-container__item">
<p class="render-container__item-text">123</p>
<button class="render-container__item-button">์‚ญ์ œ</button>
</li>
</ul>
</div>
</div>
</body>
</html>
26 changes: 26 additions & 0 deletions week3/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
.env
.env.local
Loading