출간일 2016년 11월 28일
판매가 2000원
형태 ebook
이 책의 모든 내용은 http://ehpub.co.kr에 공개하고 있습니다.
학습에 도움이 되시면 ebook을 구입하여 소장하시면 감사하겠습니다.
언제나 휴일 출판사의 수익금의 대부분은 아프리카에 기부하고 있습니다.
4.1 클래스 정의
Java 언어에서 클래스를 정의할 때 캡슐화 대상은 멤버 필드와 멤버 메서드입니다. 멤버 필드는 개체의 상태를 나타내는 필드로 데이터로 생각할 수 있습니다. 멤버 메서드는 개체의 상태를 제어하는 기능입니다.
그리고 클래스의 멤버에는 접근 지정을 통해 클래스 내부에서만 접근할 수 있는지, 클래스 내부와 파생 클래스에서 접근할 수 있는지, 다른 클래스에서도 접근할 수 있는지를 결정할 수 있습니다. 이를 통해 개체의 정보를 은닉하여 신뢰성을 높일 수 있습니다.
클래스는 클래스 이름과 멤버 필드와 멤버 메서드로 구성합니다. OOP 프로그램을 설계할 때 클래스는 세 개의 칸으로 구분하는 사각형으로 표시하는데 맨 위칸에는 클래스 이름을 표시하고 두 번째 칸에는 멤버 필드, 세 번째 칸에는 멤버 메서드를 표시합니다.
그리고 멤버의 접근 지정도 같이 표시하는데 +는 다른 클래스에서도 접근할 수 있다는 표시로 코드 상에서는 public으로 지정합니다. #은 클래스 내부와 파생 클래스에서 접근할 수 있다는 표시로 코드 상에서는 protected로 지정하며 다음 장에서 다룰 것입니다. 마지막으로 -는 클래스 내부에서만 접근할 수 있다는 표시로 private으로 지정합니다.
[그림 4.2] UML에서 클래스 표시
예를 들어 음악가를 정의해 보기로 합시다. 프로그램에서는 음악가마다 이름과 연주 스킬, 음악가 번호를 기억하고 연주하다, 소개하다 및 음악가의 상태 정보를 확인할 수 있도록 합시다. 또한 음악가 개체를 생성할 때 음악가 이름과 번호를 전달하기로 합시다.
이를 위해 음악가를 클래스로 정의하고 이름과 연주 스킬, 음악가 번호는 음악가 개체 상태 정보이므로 멤버 필드로 캡슐화합니다. 그리고 음악가 개체를 생성하기 위한 전용 메서드(생성자)와 연주하다, 소개하다 및 음악가의 상태 정보를 확인하는 메서드를 캡슐화합니다.
먼저 Java 프로젝트를 생성한 후에 진입점 클래스를 작성할 Program 클래스를 추가하세요. 그리고 Musician 클래스를 추가하세요.
클래스를 정의할 때 class 키워드와 클래스 이름을 명시하고 블럭을 지정하여 블록 내부에 멤버 필드와 멤버 메서드를 캡슐화합니다.
public class Musician {
}
4.1.1 멤버 필드
먼저 음악가 이름과 연주 스킬 및 음악가 번호를 기억할 멤버 필드를 캡슐화합니다. 멤버 앞에 접근 지정자를 표시하지 않으면 디폴트로 private으로 지정하며 해당 클래스 내부에서만 접근할 수 있습니다.
String name;
int skill;
int num;
4.1.2 생성자
프로그램에서 클래스 형식의 개체를 생성할 때 해야 할 일을 정의하는 메서드를 생성자라고 부릅니다. 생성자는 클래스 이름과 같으며 반환 형식을 명시할 수 없습니다.
public Musician(String name,int num){
this.name = name;
this.num = num;
skill = 0;
}
4.1.3 멤버 메서드
멤버 메서드는 반환 형식과 메서드 이름을 명시한 후에 ( ) 내부에 호출하는 곳에서 전달한 값을 받기 위한 입력 매개변수 리스트를 명시합니다. 그리고 블록 내부에서 해야 할 작업에 대한 코드를 작성합니다.
public void introduce(){
System.out.println("이름:"+name+" 번호:"+num +" 스킬:"+skill);
}
public void play(){
System.out.println("이름:"+name+" 연주하다.");
skill++;
}
특히 개체의 특정 멤버 필드의 값을 가져오거나 설정하는 메서드를 속성 메서드라고 부르는데 멤버 필드 값을 가져오는 메서드 이름은 get 뒤에 멤버 필드 명으로 정하고 설정하는 메서드 이름은 set 뒤에 멤버 필드 명으로 지정하는 것이 관용입니다.
public String getName(){
return name;
}
public int getSkill(){
return skill;
}
public int getNum(){
return num;
}
public class Musician { String name; int skill; int num; public Musician(String name,int num){ this.name = name; this.num = num; skill = 0; } public void introduce(){ System.out.println("이름:"+name+" 번호:"+num +" 스킬:"+skill); } public void play(){ System.out.println("이름:"+name+" 연주하다."); skill++; } public String getName(){ return name; } public int getSkill(){ return skill; } public int getNum(){ return num; } } |
[소스 4.1] Musician.java
4.1.4 개체 생성 및 테스트
이제 정의한 Musician 클래스의 개체를 생성하고 이를 사용하는 예제 코드를 작성합시다.
여기에서는 Program 클래스 진입점 메서드에서 테스트 코드를 작성할게요.
public static void main(String[] args){
}
먼저 개체를 생성합니다. 개체를 생성할 때는 new 키워드와 생성할 클래스 이름과 생성자에 전달할 인자를 표시합니다.
Musician musician = new Musician("홍길동",1);
Program 클래스에서는 Musician 클래스에 public으로 접근 지정한 멤버만 사용할 수 있습니다. 여기에서는 간단히 테스트하는 코드를 작성합시다.
public class Program { public static void main(String[] args){ Musician musician = new Musician("홍길동",1); musician.introduce(); musician.play(); String name = musician.getName(); System.out.println("음악가 이름:"+name); musician.introduce(); } } |
이름:홍길동 번호:1 스킬:0 이름:홍길동 연주하다. 음악가 이름:홍길동 이름:홍길동 번호:1 스킬:1 |
[소스 4.2] Program.java
'언어 자료구조 알고리즘 > 디딤돌 Java 언어 Part1' 카테고리의 다른 글
[Java] 5. OOP 상속과 다형성, 5.1 상속 (0) | 2016.04.04 |
---|---|
[Java] 4. 5 정적 멤버와 static 키워드와 상수화에 사용하는 final 키워드 (0) | 2016.04.04 |
[Java] 4.4 개체의 생성과 소멸 (0) | 2016.04.04 |
[Java] 4.3 중복 정의(Overloading) (0) | 2016.04.04 |
[Java] 4.2 접근 지정자, Java 언어 (0) | 2016.04.04 |
[Java] 4. OOP 캡슐화 (0) | 2016.04.04 |
[Java] 3.3 반복문 (while, for, break, break 레이블, continue) (0) | 2016.04.04 |
[Java] 3.2 선택문 (0) | 2016.04.04 |
[Java] 3.1 조건문 (0) | 2016.04.04 |
[Java] 3. 제어문 (0) | 2016.04.04 |