ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 캡슐화(encapsulation)란?
    Design Pattern/객체지향 2024. 4. 10. 23:22
    반응형

     캡슐화는 객체 지향 프로그래밍(OOP)의 네 가지 주요 원칙 중 하나로, 데이터(객체의 상태)와 데이터를 조작하는 메소드를 하나로 묶는 것을 말합니다.

    1. 캡슐화란?

     캡슐화는 객체의 세부 구현 내용을 숨기고, 사용자에게는 필요한 기능만을 제공하는 기술입니다. 즉, 객체의 데이터를 직접적으로 접근하는 대신 메소드를 통해 접근하게 함으로써 데이터의 무결성을 유지할 수 있습니다. 이를 통해 객체의 구현과 사용을 분리하고, 변경에 유연하게 대응할 수 있는 코드를 작성할 수 있습니다.

    2. 캡슐화 코드 예시

    JAVA

    public class Employee {
        private String name;
        private int age;
        private double salary;
    
        public Employee(String name, int age, double salary) {
            this.name = name;
            this.age = age;
            this.salary = salary;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public double getSalary() {
            return salary;
        }
    
        public void setSalary(double salary) {
            this.salary = salary;
        }
    }

     

    Golang

    Go 언어는 전통적인 OOP 언어와 다르게 구조체(struct)와 메소드를 사용하여 캡슐화를 구현합니다.

    package main
    
    import "fmt"
    
    type Employee struct {
    	name   string
    	age    int
    	salary float64
    }
    
    func (e *Employee) GetName() string {
    	return e.name
    }
    
    func (e *Employee) SetName(name string) {
    	e.name = name
    }
    
    func (e *Employee) GetAge() int {
    	return e.age
    }
    
    func (e *Employee) SetAge(age int) {
    	e.age = age
    }
    
    func (e *Employee) GetSalary() float64 {
    	return e.salary
    }
    
    func (e *Employee) SetSalary(salary float64) {
    	e.salary = salary
    }
    
    func main() {
    	emp := Employee{"John Doe", 30, 50000}
    	fmt.Println(emp.GetName())
    	emp.SetSalary(55000)
    	fmt.Println(emp.GetSalary())
    }

     

    3. 추가 팁

    • 접근 제어자 사용: Java에서는 private, protected, public 같은 접근 제어자를 사용하여 클래스 멤버의 접근을 제한할 수 있습니다. Go에서는 대문자로 시작하는 이름이 외부 패키지에서 접근 가능한 공개 멤버가 됩니다.
    • 데이터 무결성 유지: 적절한 캡슐화를 통해 객체의 상태가 예상치 못한 방식으로 변경되는 것을 방지할 수 있습니다. 사용자가 객체의 상태를 변경하려면 객체가 제공하는 메소드를 통해야만 합니다.
    • 유지보수성 향상: 캡슐화는 코드의 유지보수성을 향상시킵니다. 객체의 내부 구현을 변경하더라도, 이를 사용하는 코드에는 영향을 미치지 않기 때문에 시스템의 다른 부분을 변경하지 않고도 개선이 가능합니다.
    반응형
Designed by Tistory.