미니멜로디

자바 인터페이스 (interface)와 equals 본문

프로그래밍/자바

자바 인터페이스 (interface)와 equals

미니멜로디 2018.02.25 21:03

인터페이스 (interface)

상수형 필드(필드명 대문자)와 추상 메소드로만 구성된 추상 클래스의 변형체
클래스에 추상메소드를 포함시키는 구조보다는 메소드의 통일성을 부여하기 위해서 추상 메소드만 따로 모아 놓은 추상 클래스
인터페이스의 멤버는 반드시 public. 필드는 상속이 아닌 인터페이스 것이기 때문에 public으로 되어 있어야 사용 가능


[public] interface 인터페이스명

{

// 그냥 작성하여도 자동으로 static final이 됨

[public] static final 자료형 필드명 = 초기값;     // [ ] 안에 있는 건 선택!


// 추상 메소드

[public abstract] 반환형 메소드명([자료형 매개변수]);

}


상수형 필드는 자동으로 선언되어 있는 것이고, 추상 메소드는 후손이 꼭 만들어야 하는 것이다


- 사용
상속을 통해서 후손이 부모 인터페이스의 추상 메소드를 완성 시키는 방식 → interface를 상속할 때에는 implements라는 키워드 사용


클래스의 상속 : extends 부모클래스명(단일 상속)
인터페이스의 상속 : implements 인터페이스명 (다중상속 가능)


class 클래스명 extends 클래스명 implements 인터페이스명

{ }


class 클래스명 implements 인터페이스명1, 인터페이스명2, 인터페이스명3 ...    // 다중 선언 가능

{ }


interface 인터페이스명 extends 부모인터페이스명    // 인터페이스 간에도 상속이 가능

{ }



equals

객체와 객체가 같은 것인지를 비교하는 메소드
일반적으로 String에서는 문자열 자체를 비교하는 메소드라고 보면 된다


String [] name = new String[5];

name[0] = "홍길동";

name[1] = "김말똥";

name[2] = "고길똥";

name[3] = "똥똥똥";

name[4] = "김지똥";

Scanner sc = new Scanner(System.in);

System.out.print("검색할 이름 : ");

String tmp = sc.next();

for(int i=0;i<name.length;i++)

{

if(name[i].equals(tmp))

{

System.out.println(i + "번째 인덱스에 위치합니다.");

break;

}

}



CRUD (Create Read Update Delete)

입력, 출력, 수정, 삭제 기능을 구현


// Grade.java

package kh.java.point.model.vo;


public abstract class Grade {

private String name;

private String grade;

private int point;

public Grade() {}

public Grade(String name, String grade, int point)

{

this.name = name;

this.grade = grade;

this.point = point;

}

public void setName(String name) {this.name = name;}

public void setGrade(String grade) {this.grade = grade;}

public void setPoint(int point) {this.point = point;}

public String getName() {return name;}

public String getGrade() {return grade;}

public int getPoint() {return point;}

public abstract double getInterest();

}


// Silver.java

package kh.java.point.model.vo;


public class Silver extends Grade{

public Silver() {}

public Silver(String name, String grade, int point)

{

super(name, grade, point);

}


@Override

public double getInterest() {

return this.getPoint()*0.03;

}


}


// Gold.java

package kh.java.point.model.vo;


public class Gold extends Grade{

public Gold() {}

public Gold(String name, String grade, int point)

{

super(name, grade, point);

}


@Override

public double getInterest() {

return this.getPoint()*0.05;

}


}


// Vip.java

package kh.java.point.model.vo;


public class Vip extends Grade{

public Vip() {}

public Vip(String name, String grade, int point)

{

super(name, grade, point);

}


@Override

public double getInterest() {

return this.getPoint()*0.1;

}

}


// PntMgrInterface.java

package kh.java.point.controller;


public interface PntMgrInterface {

public void start();

public void insertData();

public void printData();

public void modifyData();

public void deleteData();

public int searchData();

}


// PntMgr.java

package kh.java.point.controller;


import java.util.Scanner;

import kh.java.point.model.vo.*;


public class PntMgr implements PntMgrInterface{

Scanner sc = new Scanner(System.in);

private Grade [] g = new Grade [20];

private int index = 0;

private String grade, name;

private int point;

public PntMgr() {}


@Override

public void start() {

while(true)

{

System.out.println("========== 회원 관리 시스템 ==========");

System.out.println("1. 회원 추가");

System.out.println("2. 회원 전체 출력");

System.out.println("3. 회원 수정");

System.out.println("4. 회원 삭제");

System.out.println("0. 프로그램 종료");

System.out.print("선택 : ");

int select = sc.nextInt();

switch(select)

{

case 1:

insertData();

break;

case 2:

printData();

break;

case 3:

modifyData();

break;

case 4:

deleteData();

break;

case 0:

System.out.println("프로그램을 종료합니다");

return;

}

}

}


@Override

public void insertData() {

// 정보 입력시 1명씩 입력 및 추가 될 수 있도록 해야 함

System.out.println("======= 회원 추가 서비스 =======");

System.out.print("등급 입력 (Silver/Gold/Vip) : ");

grade = sc.next();

if(!(grade.equals("Silver") || grade.equals("Gold") || grade.equals("Vip")))

{

System.out.println("잘못 입력하셨습니다.(회원 추가를 종료합니다)");

return;

}

System.out.print("이름 입력 : ");

name = sc.next();

System.out.print("포인트 입력 : ");

point = sc.nextInt();

System.out.println("회원 추가가 완료되었습니다.");

if(grade.equals("Silver"))

{

g[index++] = new Silver(name,grade,point);

}

else if(grade.equals("Gold"))

{

g[index++] = new Gold(name,grade,point);

}

else if(grade.equals("Vip"))

{

g[index++] = new Vip(name,grade,point);

}

}


@Override

public void printData() {

// 정보 출력시 전체 출력

System.out.println("<<========== information ==========>>");

System.out.printf("%-15s %-15s %-15s %-15s \n","이름","등급","포인트","이자포인트");

for(int i=0;i<index;i++)

{

System.out.printf("%-8s %-8s %-10d %.1f \n", g[i].getName(),g[i].getGrade(),g[i].getPoint(),g[i].getInterest());

}

}


@Override

public void modifyData() {

// 정보 수정시 이름으로 검색하고 정보 수정이 가능 해야 함 - 검색은 searchData

int tmp = searchData();

System.out.print("수정될 등급 입력(Silver/Gold/Vip) : ");

grade = sc.next();

System.out.print("수정될 이름 입력 : ");

name = sc.next();

System.out.print("수정될 점수 입력 : ");

point = sc.nextInt();

System.out.println("수정이 완료되었습니다.");

if(grade.equals("Silver"))

{

g[tmp] = new Silver(name,grade,point);

}

else if(grade.equals("Gold"))

{

g[tmp] = new Gold(name,grade,point);

}

else if(grade.equals("Vip"))

{

g[tmp] = new Vip(name,grade,point);

}

}


@Override

public void deleteData() {

// 정보 삭제시 이름으로 검색하고 정보 삭제가 되어야 함 - 검색은 searchData

int tmp = searchData();

System.out.println("회원 정보가 삭제되었습니다.");

for(int i=0;i<index;i++)

{

if(g[i].getName() == g[tmp].getName())

{

g[i] = g[i+1];

}

}

index--;

}


@Override

public int searchData() {

System.out.print("검색될 회원 이름 입력 : ");

name = sc.next();

for(int i=0;i<index;i++)

{

if(g[i].getName().equals(name))

{

return i;

}

}


return -1;

}

}


TestMain.java

package kh.java.point.run;


import kh.java.point.controller.PntMgr;


public class TestMain {

public static void main(String[] args) {

new PntMgr().start();

}

}


3 Comments
댓글쓰기 폼