객체1-2.) 추상화/캡슐화/setter함수/Getter함수
객체 1-1./객체지향언어/추상화/캡슐화/변수
자바에서 시작 혹은 자바의 꽃을 묻는다면 객체를 얘기 안 할 수 없습니다. 자바언어의 본질과 객체지향언어, 객체,클래스등등에 대해서 얘기해보겠습니다. 객체 지향 언어 : 객체 지향언어란
kwanghyung.tistory.com
추상화와 캡슐화에 대해서 더 얘기해보겠습니다. 추상화는 객체 변수를 생각하여 적절하게 객체에 넣을 수 있는 값을 선정하고 초기화해주는 과정입니다. 캡슐화는 이러한 과정을 통해 완벽한 클래스의 형태를 갖추게 하는 것입니다.
캡슐화를 하지 않으면 외부로부터 직접 접근이 가능하기 때문에 함부로 값이 변질되거나 조회 하는것을 막지 못하는 문제가 생깁니다.
-> 캡슐화 작업은 정보은닉 기술 중 하나로 데이터의 접근 제한을 원칙으로 하여 외부로부터 직접 접근을 막는것입니다. 단, 접근 할 수 없으면 안되기 때문에 간접접근을 허용하는 메소드가 필요합니다. 이러한 메소드가 setter,getter함수가 되겠습니다.
캡슐화 작업은 값을 숨기기 위해
첫번째로 속성,변수 앞에 접근제한자를 public에서 private으로 변경합니다. Private은 클래스내에서만 접근 할 수 있기 때문에 클래스내에서가 아니라 외부에서는 접근이 안됩니다.
두번째로 간접적으로 접근할 수 있는 메소드들을 생성합니다. setter/getter함수입니다.
Setter함수는 속성에 값을 세팅(대입)해주는 메소드입니다.
Getter함수는 속성에 담긴값을 꺼내오는 (조회) 메소드입니다.
Set메소드에 대한 설명입니다. 예를 들어 setName에 대해서 설명하겠습니다. String name은 String 데이터 타입변수에 name이라는 변수를 매개변수로 받는다는 뜻입니다. 즉, 외부에서 접근할때 접근하는 변수의 값을 name으로 받는다는 뜻입니다. 예를 들어
김연아라는 객체를 만든다고 가정합니다. Run 메인메소드 클래스 즉 다른 패키지에 있는 클래스 Run에서 김연아라는 객체를 new 연산자로 생성하고 그 값을 kim이라는 인스턴스로 생성합니다. 그리고 kim.setName("김연아"); 라고 하면 Exercise 클래스에서 private String name이라 접근이 안됩니다. 이때 접근하기 위해 set함수를 쓴것입니다. 그래서 정보은닉을 유지하면서 외부에서 간접적으로 접근을 한 것입니다.
여기서 set함수는 "김연아"라는 값을 넣고 싶은데 그 값 "김연아"가 들어올 때 String name으로 그 값을 받습니다. 그리고 매개변수를 받은 값을 this.name에 대입함으로써 변수에 있는 private String name="김연아"; 라는 초기화가 가능하게 됩니다.
get메소드는 값을 반환하는 메소드입니다.
그 반환 데이터 타입은 위의 예제는 String입니다. 반환 할 값이 없으면 void로 설정하고, 반환할 타입이 기본타입이 아니라 클래스 타입, 배열, 등등 일 수 있습니다. 그러면 반환하는 타입은 어떻게 결정할까요? 바로 return 입니다. Return 뒤에 name이 string 타입이라서 그렇습니다. get메소드를 호출하면 그 값으로 name을 가지고 올 수 있습니다. 그 값이 정말로 가져왔는지 알고 싶어서 출력문을 가져오면 set함수로 가지고 온 값을 출력 할 수 있습니다.
위의 예제를 보고 빨간줄만 보면 set함수로 김연아를 설정하고, getName을 통해서 김연아를 가지고 왔습니다. 그리고 출력문으로 출력하며 다음과 같습니다.
다음 시간에는 생성자부에 대해서 얘기하겠습니다.