[JS] ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ค ์์(Random Color) ์์ฑํ๊ธฐ
HEX ์์ ์ฝ๋๋ RGB ์์์ RRGGBB
ํ์์ 16์ง์๋ก ํํํ๋ค. HEX ์ฝ๋์ ์ต์ ๊ฐ์ #000000
(๊ฒ์์, 10์ง์ 0), ์ต๋๊ฐ์ #FFFFFF
(ํฐ์, 10์ง์ 16777215)์ด๊ธฐ ๋๋ฌธ์ 0~16777215 ์ฌ์ด์ ๋๋ค ์ซ์๋ฅผ 16์ง์๋ก ๋ณํํ๊ณ #
๋ฅผ ๋ถ์ด๋ฉด ๋๋คํ HEX ์์ ์ฝ๋๊ฐ ๋๋ค.
export const getRandomColor = ({
transparent = false,
transProbability = 0.2,
} = {}) => {
// transProbability ํ๋ฅ ๋ก(๊ธฐ๋ณธ๊ฐ 20%) ํฌ๋ช
๊ฐ ๋ฐํ
if (transparent && Math.random() < transProbability) return "transparent";
// 16์ง์๋ก 0xFFFFFF (RGB์ ์ต๋๊ฐ)
const MAX_COLOR_VALUE = 16777215;
// ํฐ์๋ ํฌํจํ๊ธฐ ์ํด + 1
const randomColor = Math.floor(Math.random() * (MAX_COLOR_VALUE + 1));
return `#${randomColor.toString(16).padStart(6, "0")}`;
};
Math.random()
๋ฉ์๋๋ 0 ์ด์ 1 ๋ฏธ๋ง(0 ≤ x < 1)์ ๋์๋ฅผ ๋ฐํํ๋ฉฐ, ์ด ๋์๋ค์ ๊ฑฐ์ ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋๋๋ก ์ค๊ณ๋์ด ์๋ค(approximately uniform distribution). ์ฆ, 0๊ณผ 1 ์ฌ์ด์ ๋ชจ๋ ์ซ์๊ฐ ๊ฑฐ์ ๋์ผํ ํ๋ฅ ๋ก ์ ํ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ ์กฐ๊ฑด์ Math.random() < n
์ 0 ≤ x < 1 ๋์ ๊ฐ์ด n
๋ณด๋ค ์์ ๊ฒฝ์ฐ์ ํ๋ฅ ์ ์๋ฏธํ๋ฉฐ, n
์ ํ๋ฅ ๋ก ํด์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด n = 0.2
์ผ ๋ Math.random()
์ด 0.2๋ณด๋ค ์์ ๊ฐ์ ๋ฐํํ ํ๋ฅ ์ 20%์ด๋ค.
RGB๋ Red(R), Green(G), Blue(B) 3๊ฐ์ง ์์ ์ฑ๋๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ฐ ์ฑ๋์ 8๋นํธ๋ก ํํ๋๋ค. 8๋นํธ๋ 2^8=256๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ์ ์๋ค(0-255). RGB๋ก ํํํ ์ ์๋ ์ด ์์ ์๋ 256^3=16777216 ์ด์ง๋ง 0๋ถํฐ ์์ํ๋ฏ๋ก 0-16777215 ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- (16)
#000000
= (10)0
=RGB(0, 0, 0)
- (16)
#FFFFFF
= (10)16777215
=RGB(255, 255, 255)
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CSS] :focus, :focus-visible ์ฐจ์ด์ (1) | 2025.03.06 |
---|---|
[CSS] ์์ ๋งฅ๋ฝ Stacking Context (0) | 2025.02.26 |
[React] ๋ฆฌ์กํธ 19 ์ ๋ฐ์ดํธ ๋ด์ฉ ํบ์๋ณด๊ธฐ (0) | 2025.02.08 |
[Next.js] Dynamic Routes ๋ค์ด๋๋ฏน ๋ผ์ฐํธ (0) | 2025.01.31 |
[Next.js] App Router ๊ณต์ ํํ ๋ฆฌ์ผ ํบ์๋ณด๊ธฐ (1) | 2025.01.30 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[CSS] :focus, :focus-visible ์ฐจ์ด์
[CSS] :focus, :focus-visible ์ฐจ์ด์
2025.03.06 -
[CSS] ์์ ๋งฅ๋ฝ Stacking Context
[CSS] ์์ ๋งฅ๋ฝ Stacking Context
2025.02.26 -
[React] ๋ฆฌ์กํธ 19 ์ ๋ฐ์ดํธ ๋ด์ฉ ํบ์๋ณด๊ธฐ
[React] ๋ฆฌ์กํธ 19 ์ ๋ฐ์ดํธ ๋ด์ฉ ํบ์๋ณด๊ธฐ
2025.02.08 -
[Next.js] Dynamic Routes ๋ค์ด๋๋ฏน ๋ผ์ฐํธ
[Next.js] Dynamic Routes ๋ค์ด๋๋ฏน ๋ผ์ฐํธ
2025.01.31