3.3 Encapsulation

작성자 : 진은영 ( 2004-07-21 )

[메인] [목록]

목차

3.3.1 Encapsulation 이란

캡슐화는 객체를 만들 때, 객체 내부에 들어있는 변수나 메소드등의 정보를 객체 밖으로 공개하지 않고, 따로 공개하는 변수나 메쏘드를 통해서 객체를 사용할 수 있게 해주는 개념을 말한다. 캡슐화는 프로그램을 복잡하지않게 만들 수 있는데 도움을 주며, 소프트웨어 개발자에게 몇가지 장점을 제공한다.
(실행은 그림 위에서 마우스 오른쪽 버튼을 클릭하여 재생을 누른다.)

위 그림을 보면 사람이 동사무소에 들어가 등본 한통을 떼려한다. 그러나 직접 정보가 들어있는 곳으로 가서 자신이 등본을 뗄수는 없다. 그 정보는 보호되고 있기 때문이다. 원하는 정보에 접근하려면 정보에 접근이 가능한 동사무소 직원에게 얘기해서 등본을 떼야 한다.

이것이 정보를 보호하는 캡슐화이다.


3.3.2 Encapsulation하려면

  • 멤버변수에는 직접 접근이 불가능하게 접근제한자를 private 으로 지정한다.
  • 접근이 가능한 메소드를 선언한다. 메소드의 접근 제한자는 public 으로 지정한다.

    • 멤버변수에 값을 대입하는 메소드의 이름은 set 으로 시작한다.

    • 멤버변수의 값을 가져가는 메소드의 이름은 get 으로 시작한다.

모든 멤버변수에 캡슐화를 할 필요는 없다. 추상화 할때 필요하다고 생각하는 멤버변수에만 캡슐화를 하면 된다.
class Car {
        //멤버변수 선언
        String name ; 
        String brand ;
        String color ; 
}

위와 같은 클래스에서 name 변수는 외부에서 직접 접근하지 못하게 막고 싶다. 그러나 값을 가져갈 수 있게는 지정하고 싶다면
public String getName(){
    return name ;
}
  • 접근제한자 : 어디에서나 접근이 가능한 public
  • 리턴타입 : 멤버변수인 name의 데이터타입인 String
  • 메소드명 : 가져가는 메소드이기 때문에 get으로 시작하고 멤버변수의 이름을 인용하여 getName
  • 매개변수 : 멤버변수를 가져가는 것이기 때문에 매개변수는 필요없다.


brand멤버변수에는 값을 대입하고 싶다면
public void setBrand( String b ){
    brand = b ;
}
  • 접근제한자 : 어디에서나 접근이 가능한 public
  • 리턴타입 : 멤버변수인 brand에 값을 대입하는 것이기 때문에 return할 것이 없어서 void
  • 메소드명 : 값을 대입하는 메소드이기 때문에 set으로 시작하고 멤버변수의 이름을 인용하여 setBrand
  • 매개변수 : 외부에서 입력받을 DataType과 변수명을 기입한다. DataType은 멤버변수의 타입과 동일하게 기입한다.



3.3.3 예제

3_1 강좌에서 다뤘던 Employees에서 멤버변수에 대한 캡슐화를 지정해보자.
public class Employees {
        
        //멤버변수 선언
        private String empID ; 
        private String name ; 
        private String position ; 
        private int salary ; 

        //메소드 선언
        public void print(){}

        public int calSalary(){}
}

public class Employees {
        
        //멤버변수 선언
        private String empID ; 
        private String name ; 
        private String position ; 
        private int salary ; 

        //메소드 선언
        //public void print(){}

       // public int calSalary(){}

	// set Method
	public void setEmpID( String id ){
		empID = id ;
	}
	public void setName( String n ){
		name = n ;
	}
	public void setPosition( String p ){
		position = p ;
	}
	public void setSalary( int s ){
		salary = s ;
	}

	//getMethod
	public String getEmpID(){
		return empID ; 
	}
	public String getName(){
		return name ; 
	}
	public String getPosition(){
		return position ; 
	}
	public int getSalary(){
		return salary ; 
	}
}