- 익명 클래스
- 주요 개념 정리
- 종합 실습 문제
익명 클래스를 활용해서 UI 처리를 하는 문제를 풀어보았다.
// InputBox 클래스
public class InputBox {
public static final int KEY_DOWN = 2;
public static final int KEY_UP = 4;
KeyEventListener listener;
public InputBox() {}
public void setKeyListener(KeyEventListener listener) {
this.listener = listener;
}
public void listenerCalled(int eventType) {
if(eventType == KEY_DOWN) {
listener.onKeyDown();
} else if(eventType == KEY_UP) {
listener.onKeyUp();
}
}
}
// KeyEventListener 인터페이스
public interface KeyEventListener {
public void onKeyDown();
public void onKeyUp();
}
// MyPage 클래스
public class MyPage {
public static InputBox input;
public static void main(String[] args) {
MyPage my = new MyPage();
my.setUI();
my.pressKey();
}
public void setUI() {
input = new InputBox();
KeyEventListener listener = new KeyEventListener() {
@Override
public void onKeyUp() {
System.out.println("Key Down");
}
@Override
public void onKeyDown() {
System.out.println("Key Up");
}
};
input.setKeyListener(listener);
}
public void pressKey() {
input.listenerCalled(InputBox.KEY_DOWN);
input.listenerCalled(InputBox.KEY_UP);
}
}
상태와 행위를 갖는 자바의 기본 단위이다.
연관된 상태와 행위를 결정하는 기능을 묶어 주는 것이다.
메서드에서 다른 메서드를 호출할 때 전달하는 값으로 매개변수를 메시지라고도 한다.
클래스는 사물의 단위를 의미하고 객체는 각 사물을 의미한다.
부모에 선언된 변수와 메서드에 대한 사용권을 갖는 것이다.
부모 클래스에서 파생된 자식 클래스들의 기능이 각기 다를 수 있다.
부모 클래스에 선언되어 있는 메서드와 동일한 선언을 갖지만 구현이 다른 것을 의미한다.
메서드의 이름은 동일하지만 매개 변수들을 다르게 하는 것을 의미한다.
byte
short
int
long
char
float
double
boolean
일반적으로 new 와 생성자를 지정해 객체를 생성한다.
String 은 특수한 참조 자료형으로 new 를 이용해 객체를 생성할 필요가 없고 + 연산이 가능한 유일한 클래스다.
try {
// 예외가 발생 가능한 문장
} catch(예외 e) {
// 예외가 발생했을 때 처리 문장
} finally {
// 무조건 실행되는 문장
}
getBytes()
: 문자열을 byte 배열로 변경
length()
: 문자열의 길이 리턴
isEmpty()
: 문자열이 비어있는지 확인
equals()
: 두 문자열의 값이 같은지 확인
startsWith()
와 endsWith()
: 매개변수로 넘어온 문자열로 시작 또는 끝나는지 확인
contains()
: 매개변수로 넘어온 문자열이 포함되어 있는지 확인
indexOf()
와 lastIndexOf()
: 매개변수로 넘어온 문자열이 있는 위치를 반환
substring()
와 subsequence()
: 문자열의 특정 범위 값을 잘라서 리턴
split()
: String 배열로 리턴
concat()
: 기본 문자열 뒤에 매개 변수로 넘어온 문자열을 합침
trim()
: 문자열 맨 앞과 뒤에 있는 공백 제거
replace()
: 문자열의 특정 위치 내용을 매개변수로 넘어온 값으로 변경
format()
: 정해진 포맷으로 변환
지금까지 배운 내용을 바탕으로 직원들의 연봉 인상율을 계산하는 문제를 풀어보았다.
어떻게 하면 코드를 좀 더 간략하게 작성할 수 있을지에 대해서도 고민해면서 문제를 풀어보았다.
특히 객체지향 문제는 많이 생각해보고 풀어봐야하는 것 같다. 알고있다고 생각했던 것도 막상 코드로 작성하려고 하면 잘 생각이나지 않는다거나 에러가 발생하는 것 같다.
앞으로 더 많이 생각하고 코드도 두드려보면서 성장!
하고싶다 🛠️
Employee 클래스
public class Employee {
private String name; // 이름
private int type; // 업무 역할
private long salary; // 연봉
// 생성자
public Employee(String name, int type, long salary) {
this.name = name;
this.type = type;
this.salary = salary;
}
// setter
public void setName(String name) {
this.name = name;
}
public void setType(int type) {
this.type = type;
}
public void setSalary(long salary) {
this.salary = salary;
}
// getter
public String getName() {
return name;
}
public int getType() {
return type;
}
public long getSalary() {
return salary;
}
}
CalculateSalary 클래스
public class CalculateSalary {
public static void main(String[] args) {
CalculateSalary calc = new CalculateSalary();
calc.calculateSalaries();
}
public long getSalaryIncrease(Employee employee) {
long increase = 0;
switch(employee.getType()) {
case 1 :
increase = (long)(employee.getSalary() + (employee.getSalary() * -0.95));
employee.setSalary(increase);
break;
case 2 :
increase = (long)(employee.getSalary() + (employee.getSalary() * 0.1));
employee.setSalary(increase);
break;
case 3 :
increase = (long)(employee.getSalary() + (employee.getSalary() * 0.2));
employee.setSalary(increase);
break;
case 4 :
increase = (long)(employee.getSalary() + (employee.getSalary() * 0.3));
employee.setSalary(increase);
break;
case 5 :
increase = (long)(employee.getSalary() + (employee.getSalary() * 1));
employee.setSalary(increase);
break;
}
return increase;
}
public void calculateSalaries() {
Employee[] employee = new Employee[5];
employee[0] = new Employee("LeeDaeRi", 1, 1000000000);
employee[1] = new Employee("KimManager", 2, 100000000);
employee[2] = new Employee("WhangDesign", 3, 70000000);
employee[3] = new Employee("ParkArchi", 4, 80000000);
employee[4] = new Employee("LeeDevelop", 5, 60000000);
for (int i=0; i<employee.length; i++) {
System.out.println(employee[i].getName() + "=" + getSalaryIncrease(employee[i]));
}
Employee[] employee = { new Employee("LeeDaeRi", 1, 1000000000),
new Employee("KimManager", 2, 100000000),
new Employee("WhangDesign", 3, 70000000),
new Employee("ParkArchi", 4, 80000000),
new Employee("LeeDevelop", 5, 60000000)
};
for (Employee e : employee) {
System.out.println(e.getName() + "=" + getSalaryIncrease(e));
}
}
}