| C 구조체와 Java 클래스 오라클자바커뮤니티에서 설립한 개발자실무교육6년차 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링, Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#,
ASP.Net)
www.onjprogramming.co.kr 기존 C언어의 struct 구문은 자바언어 에서 사라졌습니다. 구조체는 단순히 몇 개의 자료 필드를 묶는 역할을 하지만 클래스는 여기에 연산을 결합시켜 필드 자체는 사용자로부터 감추도록 합니다. 즉 클래스는 자료 자체를 객체 안에 감추고 메소드를 통해서만 접근 하도록 합니다. 아래와 같은 클래스는 C의 구조체와 거의 동일 합니다. class Point { public float x; public float yl } 이러한 클래스는 자료 필드에 직접 접근 할 수 있으므로 캡슐화의 장점을 제공하지 못하는 문제점이 있습니다. 그러므로 객체 지향 프로그래머들은 아래처럼 public 필드를 private으로 바꾸고 public 접근자 메소드(Accessor Method)를 제공하는 형태를 주로 사용하려 할 것입니다. class Point { private int x; private int y; public Point(float x, float y) { this.x = x; this.y = y; } public float getX() { return x; } public float getY() { return y; } public void setX(float x) { this.x = x; } public void setY(float y) { this.y = y; } } 물론 이 클래스가 public 이라면 위의 생각은 맞습니다. 어떤 클래스가 자신이 정의된 패키지 외부에서 접근이 가능하다면(public인 경우) 프로그래머는 내부의 표현을 언제라도 바꿀 수 있는 유연성을 제공하기 위해 위의 경우 처럼 public 접근자 메소드를 제공 할 것입니다. 만의 하나라도 public 클래스가 내부 자료 필드를 외부에 공개 한다면 더 이상 클래스 내부의 구조를 변경하는 것은 불가능 한데 이미 이 클래스를 사용하여 많은 코드들이 널리 퍼져있기 때문 입니다. 그러나 어떤 클래스가 package-private 클래스이거나 private 중첩 클래스이고 데이터 필드들이 정말로 클래스가 추상화 하고 싶은 것들을 표현한다면 외부에 필드를 직접 드러낸다고 해도 잘못된 것은 아닙니다. (public 필드인 경우) 또한 이런 방식을 사용하면 public 접근자 메소드를 쓸 때 보다 클래스 코드가 훨씬 깔끔해 보일 것입니다. 이 경우 클라이언트가 이 클래스의 내부 구현에 종속적 이지만 어디까지나 패키지 내부에서 발생하는 일이며 클래스의 내부 구현을 바꾼다고 하더라도 변화의 범위는 패키지 안으로 한정 됩니다. 물론 private 중첩 클래스인 경우엔 더욱 변화의 여파가 적을 것입니다. |
2013년 8월 28일 수요일
[oraclejava커뮤니티에서 강좌, 오라클자바교육,오라클교육,자바교육잘합니다]C 구조체와 Java 클래스
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기