회원이 대여한 비디오 출력 예제(캡슐화)
Video.java
public class Video {
//video 관련 멤버변수
private String num;
private String title;
private String actor;
//디폴트 생성자
public Video() {}
public Video(String num, String title, String actor) {
this.num = num; //this는 클래스 자기 자신을 가르킨다.
this.title = title; //지역변수를 멤버변수에 대입
this.actor = actor;
}
//getter, setter 메서드
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
- 캡슐화는 클래스 내 중요한 데이터(변수)나 기능을 외부로부터 접근하지 못하도록 한다.
- 변수 앞에 자신의 클래스에서만 접근할 수 있는 접근제어자 private을 붙여준다.
- get/set 메서드를 통한 접근으로 변수에 값을 넣고 뺄 수 있도록 한다.
GeneralMember.java
public class GeneralMember {
//회원 관련 멤버변수
private String id , name, address;
private Video rentalVideo; //객체간 상호관계
public GeneralMember() {} //디폴트 생성자
public GeneralMember(String id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public void printMember() {
System.out.println("회원의 아이디 : " + id);
System.out.println("회원의 이름 : " + name);
System.out.println("회원의 주소 : " + address);
System.out.println("회원이 대여한 비디오 번호 : " + rentalVideo.getNum());
System.out.println("회원이 대여한 비디오 제목 : " + rentalVideo.getTitle());
System.out.println("회원이 대여한 비디오 배우 : " + rentalVideo.getActor());
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Video getRentalVideo() {
return rentalVideo;
}
public void setRentalVideo(Video rentalVideo) {
this.rentalVideo = rentalVideo;
}
}
- Video 클래스 타입의 참조변수 rentalVideo를 선언하여 객체 간의 상호관계를 맺어준다.
- get 메서드를 통해 Video 객체에 데이터를 가져온다.
VideoMain.java
public class VideoMain {
public static void main(String[] args) {
Video v1 = new Video("1", "반도", "강동원");
Video v2 = new Video("2", "나는 살아있다.", "유아인");
GeneralMember gm = new GeneralMember("aaa", "홍길동", "서울");
gm.setRentalVideo(v2);
gm.printMember();
}
}

- Video 객체 생성 후 초기화, GeneralMember 객체 생성 후 초기화
- 참조 변수 gm에 set()를 이용하여 Video객체에 저장된 데이터를 넣는다.
- printMember()에 작성한 get()가 호출되어 비디오에 대한 정보가 출력된다.
전화번호부 추가, 출력, 검색, 수정, 삭제 기능 구현
PhoneInfo.java
public class PhoneInfo {
//상태 : 이름, 전화번호, 생년월일
//기능 : 1인 전화내역 출력기능,
private String name;
private String phoneNo;
private String birth;
public PhoneInfo() {}
public PhoneInfo(String name, String phoneNo, String birth) {
this.name = name;
this.phoneNo = phoneNo;
this.birth = birth;
}
public void show() {
System.out.println("이름 : " + name);
System.out.println("전화번호 : " + phoneNo);
System.out.println("생년월일 : " + birth);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
}
- 멤버변수, 생성자, set/get 메서드
- 출력과 검색에 사용할 show() 메서드
Manager.java
import java.util.Scanner;
public class Manager {
PhoneInfo arr[];
Scanner sc = new Scanner(System.in);
private String name = "";
private int count = 0;
public Manager() {
arr = new PhoneInfo[10]; // 객체생성과 동시에 배열 초기화
}
public void addPhoneInfor() {
// 이름, 전화번호, 생년월일 입력
System.out.println("이름 : ");
String name = sc.nextLine();
System.out.println("전화번호 : ");
String phoneNo = sc.nextLine();
System.out.println("생년월일 : ");
String birth = sc.nextLine();
// PhoneInfo 객체 생성
// 배열에 추가 => 객체가 생성될 때마다 count 증가
arr[count++] = new PhoneInfo(name, phoneNo, birth);
}
public void listPhoneInfo() {
// 배열에 있는 모든 PhoneInfo 객체를 출력
// 현재 배열 안에 객체의 개수인 count만큼 for문을 수행.
for (int i = 0; i < count; i++) {
arr[i].show();
}
}
public void searchPhoneInfo() {
// 이름을 기준으로 검색
System.out.println("이름 : ");
String name = sc.nextLine();
int idx = -1;
for (int i = 0; i < count; i++) {
PhoneInfo info = arr[i];
if (name.equals(info.getName())) {
info.show();
idx = i;
}
}
if (idx == -1) {
System.out.println("찾을 수 없습니다.");
}
}
public void updatePhoneInfo() {
System.out.println("이름 : ");
String name = sc.nextLine();
int idx = -1;
for (int i = 0; i < count; i++) {
PhoneInfo info = arr[i];
if (name.equals(info.getName())) {
System.out.println("수정 전화번호 입력 : ");
String phoneNo = sc.nextLine();
info.setPhoneNo(phoneNo);
System.out.println("수정 생년월일 입력 : ");
String birth = sc.nextLine();
info.setBirth(birth);
idx = i;
break;
}
}
}
public void deletePhoneInfo() {
System.out.println("이름 : ");
String name = sc.nextLine();
int idx = -1;
for (int i = 0; i < count; i++) {
PhoneInfo info = arr[i];
if (name.equals(info.getName())) {
idx = i;
}
}
for(int i = idx; i < count -1; i++) {
arr[i] = arr[i + 1];
}
count = count -1;
}
}
- 객체를 담을 배열 선언 및 생성
- 배열 안에 객체의 수를 파악하기 위해 count 변수를 선언
- addPhoneInfo()에서 PhoneInfo 객체가 생성될 때마다 count가 1씩 증가한다. (count++)
- deletePhoneInfo() 삭제할 객체의 인덱스 위치를 구하고 뒤에 있는 인덱스를 하나씩 앞으로 밀어준다.
- deletePhoneInfo() 마지막으로 배열 안에 객체의 수를 맞춰주기 위해 count-1
PhoneInfoMain.java
import java.util.Scanner;
public class PhoneInfoMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Manager m = new Manager();
while (true) {
System.out.println("1.추가 2.출력 3.검색 4.수정 5.삭제 6.종료");
System.out.println("선택 : ");
String menu = sc.nextLine();
switch (menu) {
case "1":
m.addPhoneInfor();
break;
case "2":
m.listPhoneInfo();
break;
case "3":
m.searchPhoneInfo();
break;
case "4":
m.updatePhoneInfo();
break;
case "5":
m.deletePhoneInfo();
case "6":
System.out.println("프로그램 종료");
return;
}
}
}
}
'Java' 카테고리의 다른 글
[Java] 객체지향(4) 다형성 정리 (0) | 2020.07.15 |
---|---|
[Java] 객체지향(3) 상속 정리 (0) | 2020.07.15 |
[Java] 객체지향(1) 정리 (0) | 2020.07.11 |
[Java] 배열의 정렬(sort) 정리 (0) | 2020.07.11 |
[Java] 배열(Array) 정리 (0) | 2020.07.10 |