728x90 ๋ฐ์ํ ๐ Language37 [TS] Extends์ Implements ์ฐจ์ด (Difference between extends and implements) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค. ์ค๋์ TS์์ ํด๋์ค ์์ extends์ implements๊ฐ ์๊ฐ ํท๊ฐ๋ ค์ ์ ํํ ๊ธฐ์ตํ๊ธฐ ์ํด ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ Extends ์์๋ฐ๊ณ ์ ํ๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋ช ์ํ๋ ๊ฒ. ์ฆ, extends์ ์ํ๋ ํด๋์ค๋ฅผ ๋ช ์ํ๋ฉด ํด๋น ํด๋์ค์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ๋ฐ๋ก ๊ตฌํํ์ง ์์๋ ์ธ์คํด์ค์์ ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ฝ๊ฒ ๋งํด "๋ถ๋ชจ๊ฐ ๊ฐ์ง ๊ฑฐ ๋ ๋ง๋๋ก ์จ๋ ๋ผ~" ๋ผ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์๋์ ๊ฐ์ด ๋ถ๋ชจ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. class Parent { public lastName: string = "An"; public speakKorean() { console.log("์๋ ํ์ธ์"); } public eatWithChopsticks() { co.. 2022. 4. 2. [TS] ํ์ ์คํฌ๋ฆฝํธ(TypeScript)๋? (feat. ์จ์ผํ๋ ์ด์ ) ํ์ ์คํฌ๋ฆฝํธ(TypeScript)๋? ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํผ์ ์ธ ์คํ์์ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋ง์ดํฌ๋ก์ํํธ์์ ๊ฐ๋ฐ, ์ ์งํ๊ณ ์์ผ๋ฉฐ ์๊ฒฉํ ๋ฌธ๋ฒ์ ์ง์ํ๋ค. C#์ ๋ฆฌ๋ ์ํคํ ํธ์ด์ ๋ธํ์ด, ํฐ๋ณด ํ์ค์นผ์ ์ฐฝ์์์ธ Anders Hejlsberg๊ฐ ๊ฐ๋ฐ์ ์ฐธ์ฌํ๋ค. ํด๋ผ์ด์ธํธ ์ฌ์ด๋์ ์๋ฒ ์ฌ์ด๋๋ฅผ ์ํ ๊ฐ๋ฐ์ ์ฌ์ฉํ ์ ์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฌ์ฉํ๋ฉด์ ์ปค๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ์ค๊ณ๋ ์ธ์ด์ด๋ค.์๋ฐ์คํฌ๋ฆฝํธ์ ์ํผ์ ์ด๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ด ํ์ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ผ๋ก๋ ๋์ํ๋ค. ํ์ ์คํฌ๋ฆฝํธ์์ ์์ ์ด ์ํ๋ ํ์ ์ ์ ์ํ๊ณ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผ๋์ด ์คํํ ์ ์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ๋ชจ๋ ์ด์ ์ฒด์ , ๋ชจ๋ ๋ธ๋ผ์ฐ์ , ๋ชจ๋ ํธ์คํธ์.. 2022. 3. 8. [Swift] ๊ณ ๊ธ ์ฐ์ฐ์(Advanced Operator)๋? (feat. ๋นํธ์ฐ์ฐ์) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ ์ฐ์ฐํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ '^=' ์ ๊ฐ์ ์ฐ์ฐ์๋ฅผ ๋ฐ๊ฒฌํ๋๋ฐ, ์ ํํ ์ด๋ค๊ฑด์ง ๋ชจ๋ฅด๊ฒ ๋๋ผ๊ตฌ์. ์ฐพ์๋ณด๋ ํด๋น ์ฐ์ฐ์๋ Swift์์ ๊ณ ๊ธ ์ฐ์ฐ์๋ก ๋ถ๋ฅํด ๋์๋๋ผ๊ตฌ์. ๊ทธ๋์ ์ค๋์ Swift์ ๊ณ ๊ธ ์ฐ์ฐ์์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~! UInt ์ฐ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ UInt์ ๋ํ ์ดํด๊ฐ ํ์ํด์. ์๋ Int๋ ์ ์ ์ฆ, ์์์ ์์๋ฅผ ๋ชจ๋ ๊ฐ์ง ์ ์์์ฃ ? UInt๋ ์ด ์ค์์ ์์๋ง ๊ฐ์ง ์ ์์ต๋๋ค. (์์๋ฅผ ๋ฃ์ผ๋ฉด ์ปดํ์ผ ์๋ฌ ๋ฐ์) ๋ฒ์๋ก ๋ณด๋ฉด Int8 = -128...127 ์ด๊ณ , UInt8 = 0...256, Int16 = -322768...322767์ด๊ณ UInt16 = 0...65535 ์ ๋๋ค. ์ ์ํ ๋ณ์์ ๋นํธ๊ฐ ์ ๋ ฅํ.. 2022. 2. 26. [CSS] Flex ์์ฑ ์์๋ณด๊ธฐ (List of flex properties) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค. ์ค๋์ CSS์์ ์ฝ๊ฒ ๋ ์ด์์์ ํ ์ ์๋ Flex์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ flex-basis ํ๋ ์ค ์์ ์๋ ์์์ ๊ธฐ๋ณธ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ์์ฑ 50px 100px 50px 1. px์ด๋ em์ผ๋ก ์ง์ ์ง์ ํ๊ธฐ ํ๋์ ๋ฐ์ค 300px๋ก ๋๋ฆฌ๊ธฐ (์ฌ๊ธฐ์ nth-of-type(2)๋ flex์์ ์๋ ์์ ์ค 2๋ฒ์งธ๋ฅผ ์๋ฏธํฉ๋๋ค.) flex-basis: 300px; ํ์ง๋ง ๊ธ์์ ๊ธธ์ด๋ณด๋ค ์งง๊ฒ ์ง์ ํ์ ๋ ๊ธ์ ๊ธธ์ด ๋งํผ๋ง ์กฐ์ ๋ฉ๋๋ค. 2. ํค์๋๋ก ์ง์ ํ๊ธฐ ํค์๋๋ก ์ง์ ํ๊ธฐ ์ํด์ ํ๋์ ๋ฐ์ค์ ํ ์คํธ ๊ธธ์ด๋ฅผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. abcdefg hijklmnop qrstuvwxyz 1. fill ํ ์คํธ ๊ธธ์ด์ ๋ฑ ๋ง๊ฒ ์กฐ์ ๋ฉ๋๋ค. flex-basis:.. 2022. 2. 22. [CSS] ์ปฌ๋ฌ์ ๊ดํ ์์ฑ ์์๋ณด๊ธฐ (List of color properties) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ CSS ์์ฑ ์ค ์ปฌ๋ฌ์ ๊ด๋ จ๋ ์์ฑ์ ๋ํด์ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค! ๋ฐ๋ก ์์ํ ๊ฒ์~ color text ๋ฐ text-decoration ๋ฑ์ ์์ ์ ํ๋ ์์ฑ ์๊น์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ 6๊ฐ์ง๊ฐ ์์ต๋๋ค. 1. name 2. hex 3. rgb 4. hsl 5. hwb 6. global ์๋ ํ์ธ์ ์๋ ํ์ธ์ ์๋ ํ์ธ์ ์๋ ํ์ธ์ 2022. 2. 22. [CSS] CSS๋? (feat. ๊ตฌ๋ฌธ ์์ฑํ๋ ๋ฐฉ๋ฒ) ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์์ฆ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ฅผ ๊ณต๋ถํ๊ณ ์๋๋ฐ CSS์ ๋ํ ๊ธฐ์ต์ด ๊ฐ๋ฌผ ๊ฐ๋ฌผํด์ ํท๊ฐ๋ฆฌ๋๋ผ๊ตฌ์.. ๊ทธ๋์ CSS์ ๋ํด ๋ค์ ํ๋ฒ ์ ๋๋ก ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ CSS๋? Cascading Style Sheets์ ์ค์๋ง์ด๋ฉฐ ์ง๋ ํ๋ฉด ๊ณ๋จ์์ผ๋ก ์์ฑํ๋ ์คํ์ผ ์ํธ์ ๋๋ค. ๋งํฌ์ ์ธ์ด๊ฐ ์ค์ ํ์๋๋ ๋ฐฉ๋ฒ์ ๊ธฐ์ ํ๋ ์คํ์ผ ์ธ์ด๋ก HTML๊ณผ XML์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. HTML์ด ์น์ฌ์ดํธ์ ๋ชธ์ฒด๋ฅผ ๋ด๋นํ๋ค๋ฉด CSS๋ ๊ทธ ๋ชธ์ฒด๋ฅผ ์์๊ฒ ๊พธ๋ฏธ๋ ์ญํ ์ ๋ด๋นํ๋ค๊ณ ํ ์ ์์ต๋๋ค. 1994๋ ํ์ฝค ๋น์ ๋ฆฌ๊ฐ ์ฒ์ ์ ์ํ์ฌ ์ดํ W3C์์ CSS2,CSS3๋ฅผ ๊ฐ๋ฐํด์์ต๋๋ค. CSS ๊ตฌ๋ฌธ ์์ฑํ๋ ๋ฒ ์ํ๋ HTML ์์๋ฅผ ์ ํํ ๋ค ๋ฐ๊พธ๊ณ ์ถ์ ์์ฑ์ ์ ํํ.. 2022. 2. 22. [JS] ๋น๋๊ธฐ ์ฒ๋ฆฌํ๋ ๋ฒ ์์๋ณด๊ธฐ(Callback,Promise,Async & Await) ์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค. ์ค๋๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๋ฐฐ์ด Callback ํจ์์ Promise์ ๋ํด์ ์ ๊ฐ ์ดํดํ ๋ฐฉ์๋๋ก ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ Callback Callback ํจ์๋ ์คํํ๋ ์ฆ์ ์๋ฃ๋๋ ๊ฒ์ด ์๋๋ผ ํน์ ์์ ์ ์คํํ๊ณ ๋ง์น ๋ค์ ์๋ฃ๋๋ค. ์ฆ, ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ง์ฝ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ์์ ์ด ์๋ค๋ฉด ์์ ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ฑฐ๋ ์ค๊ฐ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์์ ์ด ์๋ฃ๋๋ค. ์ฝ๋ฐฑ ํจ์๊ฐ ์๋ฃ๋๋ ๊ฒฝ์ฐ๋ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์๊ฑฐ๋, ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฟ์ด๋ค. ์ฝ๋ฐฑ ํจ์๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ ์ํ๋ ํ๋ผ๋ฏธํฐ ๊ฐ๊ณผ ํจ๊ป ์์ ์ ์คํํ ํจ์๋ฅผ ๋ฐ๋์ ๊ฐ์ด ๋ฃ์ด์ค๋ค. function loadScript(src,callback) { let s.. 2022. 2. 15. [JS] Static,Protected,Private์ ๋ํด ์์๋ณด๊ธฐ ์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค! ์ค๋๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด Static,Protected,Private ์ ๋ํด ์ ๊ฐ ์ดํดํ ๊ฒ์ ๋ฐํ์ผ๋ก ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค! ๋ฐ๋ก ์์ํ ๊ฒ์~ Static Static์ ์ ์ ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ด, ๋ณํ์ง ์๋๋ค๋ ๋ป์ด๋ค. ์ด๊ฒ์ ์ด์ฉํ์ฌ ์ ์ ๋ฉ์๋, ํ๋กํผํฐ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ํด๋์ค์์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๋ถ๋ถ์ด๋ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ์ ์ํด ๋๋ ๊ฒ์ด๋ค. Static Property class Person { //๋ชจ๋ ์ฌ๋์ด ๋์ผํ๊ฒ ๊ฐ์ง๊ณ ์๊ณ ๋ณํ์ง ์๋ ๊ฐ static planet = "์ง๊ตฌ" } //ํด๋์ค ์์ฒด์์ ๋ฐ๋ก ์ฝ๊ธฐ ๊ฐ๋ฅ console.log(Person.planet) //์ง๊ตฌ Static Method class User { co.. 2022. 2. 15. [JS] ํด๋์ค(Class) ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ์์ ์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค! ์ด๋ฒ ๊ธ๋ ์ญ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด 'ํด๋์ค'๋ฅผ ์ ๊ฐ ์ดํดํ ๋ฐฉ์์ผ๋ก ๋ณต์ตํ๋ ์ฐจ์์์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ ํด๋์ค๋? ํด๋์ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํน์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ณ์์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ผ์ข ์ ํ๋ก, ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ํ(๋ฉค๋ฒ ๋ณ์)์ ๋ฉ์๋(ํจ์)๋ก ๊ตฌ์ฑ๋๋ค. - ์ํค ๋ฐฑ๊ณผ - ์ฆ, ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ฝ๊ฒ ๋ฏธ๋ฆฌ ํ์ ๋ง๋ค์ด ๋๋ ๊ฒ์ ๋๋ค. ํด๋์ค ์์ฑํ๊ธฐ ์์ ํด๋์ค๋ฅผ ๋ถ์ฌ์ค ๋ค constructor(์์ฑ์)๋ฅผ ์ด์ฉํด์ ์ด๊ธฐํ ํด์ค๋ค. ๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๋ฒ์ ์ผ๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋์ ๋์ผํ๋ค. class Player { constructor(name) { this.height = 180 this.n.. 2022. 2. 12. [JS] ํ๋กํ ํ์ (Prototype) ๋ค๋ค๋ณด๊ธฐ ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค. ์ค๋๋ ์ญ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ๋ฐฐ์ด ํ๋กํ ํ์ ์ ๋ณต์ตํ๋ ์ฐจ์์์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ Prototype์ด๋? ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ฒด๋ ์จ๊น ํ๋กํผํฐ๋ก Prototype์ ๊ฐ์ง๊ณ ์๋ค. ์ด๊ฒ์ null์ด๊ฑฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ฐ ์ด๊ฒ์ ํตํด์ ํด๋น ๊ฐ์ฒด์ ๊ธฐ๋ฅ(๋ฉ์๋)์ ๋ณต์ฌํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋ค. ์ด๋ ๊ฒ ์ฐธ์กฐํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ์ฌ ๊ฐ์ฒด์ 'ํ๋กํ ํ์ '์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. Prototype ์ค์ ํ๊ธฐ 1. __proto__ ์ด๋์ ์๋ฅผ ์ง์นญํ๋ 'player'๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ let player = { firstName:"Young", lastName:"An", get fullName() { return this.firstName .. 2022. 2. 12. [JS] ํ๋กํผํฐ ์ต์ (ํ๋๊ทธ) ๋ค๋ฃจ๊ธฐ(Property Flag) ์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค. ์ค๋์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํผํฐ ํ๋๊ทธ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ดํธ์์ ๊ณต๋ถํ๋ ๊ฒ์ ๋ณต์ตํ๋ ์ฐจ์์์ ์ ๊ฐ ์ดํดํ ๋ฐฉ์์ผ๋ก ์ ์ด๋ณด๊ฒ ์ต๋๋ค! ๋ฐ๋ก ์์ํ ๊ฒ์~ Property Flag๋? ํ๋กํผํฐ๋ ๊ฐ ๋ฟ๋ง ์๋๋ผ ํ๋๊ทธ๋ผ ๋ถ๋ฆฌ๋ ํน๋ณํ ์์ฑ 3๊ฐ์ง๋ฅผ ๊ฐ์ง๋ค. 1. writable ํด๋น ํ๋กํผํฐ๋ฅผ ์์ ํ ์ ์๊ฒ ์ค์ ํ๋ ํ๋๊ทธ 2. enumrable ํด๋น ํ๋กํผํฐ๋ฅผ ๋์ดํ ์ ์๊ฒ ์ค์ ํ๋ ํ๋๊ทธ 3. configurable ํด๋น ํ๋กํผํฐ๋ฅผ ์ญ์ , ํ๋๊ทธ ์์ ์ด ๊ฐ๋ฅํ๊ฒ ์ค์ ํ๋ ํ๋๊ทธ Property Flag ํ์ธํ๋ ๋ฐฉ๋ฒ Object.getOwnPropertyDescriptor(๊ฐ์ฒด,ํ๋กํผํฐ๋ช )์ผ๋ก ํ์ธํ๊ณ , ์ด๊ธฐ์ ๋ชจ๋ true๋ก ์ค์ ๋์ด ์.. 2022. 2. 12. [JS] JSON๊ณผ ๊ฐ์ฒด ๋ค๋ฃจ๊ธฐ ์๋ ํ์ธ์ Foma ๐ป ์ ๋๋ค! ์ค๋์ JavaScript๋ก JSON๊ณผ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๋ ๋ฒ์ ๋ํด์ ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ฐ๋ก ์์ํ ๊ฒ์~ ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ฐ๊พธ๊ธฐ JSON.stringify(๊ฐ์ฒด) ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค. let user = { name:"foma", age:27, color:"Black", [Symbol("id")]:123 } let json = JSON.stringify(user) console.log(json) //{"name":"foma","age":27,"color":"Black"} ๋ง์ฝ ๋ฉ์๋๋ undefined๊ฐ์ ๊ฐ์ง ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด ์๋์ผ๋ก ๋ฌด์ํฉ๋๋ค. user.sayHi = function() { print("sayHi") } user.somthing = un.. 2022. 2. 5. ์ด์ 1 2 3 4 ๋ค์ 728x90 ๋ฐ์ํ