πΎ λ Όλ¦¬ μ°μ° - λΆλ¦¬μΈ λμ
βν κΆμΌλ‘ μ½λ μ»΄ν¨ν° ꡬ쑰μ νλ‘κ·Έλλ°β μ€ λΆλ¦¬μΈ λμ ννΈ μμ½
κΈ°λ³Έ κ°λ
λΆλ¦¬μΈ λμλ?
1800λ λ μκ΅ μνμ μ‘°μ§ λΆ(George Boole)μ΄ λ§λ€μ΄λΈ λΆλ¦¬μΈ λμ(Boolean algebra)λ λΉνΈμ λν΄ μ¬μ©ν μ μλ μ°μ° κ·μΉμ μ§ν©μ λλ€.
λΆλ¦¬μΈ λμμ νΉμ§
- μΌλ° λμμμ μ μ¬μ±: κ²°ν© λ²μΉ, κ΅ν λ²μΉ, λΆλ°° λ²μΉ μ μ© κ°λ₯
- λΉνΈ μ°μ°μ 체κ³ν: 0κ³Ό 1(κ±°μ§κ³Ό μ°Έ)μ λν λ Όλ¦¬μ μ°μ° κ·μΉ μ 곡
- μ»΄ν¨ν° κ³Όνμ κΈ°μ΄: λͺ¨λ λμ§νΈ νλ‘μ νλ‘κ·Έλλ° λ Όλ¦¬μ κ·Όκ°
κΈ°λ³Έ λΆλ¦¬μΈ μ°μ°μ
μ°μ°μ κ°μ
| μ°μ°μ | κΈ°νΈ | μλ―Έ | νΌμ°μ°μ μ |
|---|---|---|---|
| NOT | ~ λλ ! | λ Όλ¦¬μ λ°λ | 1κ° |
| AND | & λλ && | λ Όλ¦¬κ³± | 2κ° μ΄μ |
| OR | | λλ || | λ Όλ¦¬ν© | 2κ° μ΄μ |
| XOR | ^ | λ°°νμ λ Όλ¦¬ν© | 2κ° |
NOT μ°μ° (λ Όλ¦¬μ λ°λ)
| μ λ ₯ | μΆλ ₯ |
|---|---|
| 0 (κ±°μ§) | 1 (μ°Έ) |
| 1 (μ°Έ) | 0 (κ±°μ§) |
μμ:
- NOT(κ±°μ§) = μ°Έ
- NOT(μ°Έ) = κ±°μ§
AND μ°μ° (λ Όλ¦¬κ³±)
| A | B | A AND B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
κ·μΉ: λͺ¨λ λΉνΈκ° μ°ΈμΌ λλ§ κ²°κ³Όκ° μ°Έ
OR μ°μ° (λ Όλ¦¬ν©)
| A | B | A OR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
κ·μΉ: μ΄λ ν λΉνΈλΌλ μ°Έμ΄λ©΄ κ²°κ³Όκ° μ°Έ
XOR μ°μ° (λ°°νμ λ Όλ¦¬ν©)
| A | B | A XOR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
κ·μΉ: λ λΉνΈκ° λ€λ₯Έ κ°μΌ λλ§ κ²°κ³Όκ° μ°Έ
νλ‘κ·Έλλ°μμμ νμ©
Javaμμμ λΆλ¦¬μΈ μ°μ°
// λ
Όλ¦¬ μ°μ°μ μ¬μ© μμ
boolean isRaining = true;
boolean isCold = false;
boolean hasUmbrella = true;
// AND μ°μ°
boolean takeUmbrella = isRaining && hasUmbrella; // true
// OR μ°μ°
boolean wearCoat = isRaining || isCold; // true
// NOT μ°μ°
boolean goOutside = !isRaining; // false
// XOR μ°μ° (λΉνΈ λ¨μ)
int result = 5 ^ 3; // 6 (101 XOR 011 = 110)
μ‘°κ±΄λΆ λ‘μ§μμμ νμ©
// λ³΅ν© μ‘°κ±΄ κ²μ¬
public boolean canProcessOrder(Order order) {
return order.isValid() &&
order.hasPayment() &&
!order.isCancelled();
}
// κΆν κ²μ¬
public boolean hasAccess(User user, Resource resource) {
return user.isAdmin() ||
(user.isActive() && resource.isPublic());
}
λΆλ¦¬μΈ λμμ λ²μΉ
κΈ°λ³Έ λ²μΉλ€
| λ²μΉ | 곡μ | μ€λͺ |
|---|---|---|
| κ΅ν λ²μΉ | A AND B = B AND A | μμλ₯Ό λ°κΏλ κ²°κ³Ό λμΌ |
| κ²°ν© λ²μΉ | (A AND B) AND C = A AND (B AND C) | κ·Έλ£Ήν μμ λ¬΄κ΄ |
| λΆλ°° λ²μΉ | A AND (B OR C) = (A AND B) OR (A AND C) | κ³±μ κ³Ό λ§μ μ λΆλ°°μ μ μ¬ |
νΉμ λ²μΉλ€
νλ± λ²μΉ:
A AND 1 = A
A OR 0 = A
μ λ²μΉ:
A AND 0 = 0
A OR 1 = 1
보μ λ²μΉ:
A AND NOT(A) = 0
A OR NOT(A) = 1
μ€μν μ μ© μμ
μΉ μ ν리μΌμ΄μ μ κ·Ό μ μ΄
public class AccessControl {
public boolean canAccessAdminPanel(User user) {
return user.isAdmin() &&
user.isActive() &&
!user.isLocked();
}
public boolean canViewContent(User user, Content content) {
return content.isPublic() ||
(user.isLoggedIn() && content.isUserContent(user));
}
}
λ°μ΄ν° μ ν¨μ± κ²μ¬
public boolean isValidEmail(String email) {
return email != null &&
email.contains("@") &&
!email.isEmpty() &&
email.length() > 5;
}
λΉνΈ λ¨μ μ°μ°μ νμ©
νλκ·Έ κ΄λ¦¬
// κΆν νλκ·Έ μ μ
public static final int READ = 1; // 001
public static final int WRITE = 2; // 010
public static final int EXECUTE = 4; // 100
// κΆν μ€μ
int permissions = READ | WRITE; // 011
// κΆν νμΈ
boolean canRead = (permissions & READ) != 0; // true
boolean canWrite = (permissions & WRITE) != 0; // true
boolean canExecute = (permissions & EXECUTE) != 0; // false
// κΆν μ κ±°
permissions = permissions & ~WRITE; // READλ§ λ¨κΉ
ν΅μ¬ ν¬μΈνΈ
- 체κ³μ±: λΆλ¦¬μΈ λμλ λ Όλ¦¬ μ°μ°μ λν μμ ν μνμ 체κ³
- μΌκ΄μ±: μΌλ° λμμ λ²μΉλ€μ΄ λΆλ¦¬μΈ λμμλ μ μ©λ¨
- μ€μ©μ±: νλ‘κ·Έλλ°μ 쑰건문과 λΉνΈ μ°μ°μ κΈ°μ΄
- νμ₯μ±: κΈ°λ³Έ μ°μ°μλ€μ μ‘°ν©νμ¬ λ³΅μ‘ν λ Όλ¦¬ ꡬ쑰 νν κ°λ₯
- ν¨μ¨μ±: μ»΄ν¨ν° νλμ¨μ΄μμ μ§μ ꡬνλμ΄ λ§€μ° λΉ λ₯Έ μ°μ° μλ
λΆλ¦¬μΈ λμλ λμ§νΈ μλμ λͺ¨λ λ Όλ¦¬μ μ¬κ³ μ μ»΄ν¨ν° μ°μ°μ κ·Όλ³Έ μ리λ‘, νλ‘κ·Έλλ°μμ 쑰건 νλ¨κ³Ό λ°μ΄ν° μ²λ¦¬μ ν΅μ¬ λꡬμ λλ€.