[객체지향] 클래스는 설계도면!
[객체지향] 클래스는 설계도면!
연습문제를 풀다가 클래스를 만들어서 사용하게 되어 해당 내용을 정리한다.
Q. 특별한 규칙으로 수열 만들기
A1. 기존 클래스 풀이
import java.util.Stack;
public static String solution(int[] arr) {
String answer = "";
int arrIdx = 0;
Stack<Integer> stack = new Stack<>();
// ↑ stack에 Integer 자료형이 입력된다
for (int i = 1; i <= arr.length; i++) {
stack.push(i);
answer += "+";
if(stack.peek() == arr[arrIdx]) {
while(stack.size() != 0 && stack.peek() == arr[arrIdx]) {
stack.pop();
arrIdx++;
answer += "-";
}
}
}
if(stack.isEmpty()) {
return answer;
} else {
return "NO";
}
}
A2. 나만의 클래스 만들어 사용하기
import java.util.Stack;
// stack에 int, String 등을 넣는 것이 아니라 Input이라는 객체를 넣으려고 만들어 봄.
class Input {
int data;
// ↑ 필드 변수
// 변수는 여러가지를 가질 수 있음
// 연결리스트에서는 본인 타입(Node 변수를 가지기도 함)
Input() {}
// ↑ 기본 생성자
Input(int data) {
this.data = data;
}
// ↑ 매개변수 생성자
}
public static String solution(int[] arr) {
String answer = "";
int arrIdx = 0;
Stack<Input> stack = new Stack<>();
// ↑ stack에 Input 자료형이 입력된다
for (int i = 0; i < arr.length; i++) {
stack.push(new Input(i+1));
// ↑ stack에 push할 때 Input 객체를 만들어서 넣는다
answer += "+";
Input cur = stack.peek();
// ↑ 내부 변수 접근 시 객체를 만들고 그 객체의 .연산자로 접근!!
if(cur.data == arr[arrIdx]) {
while(stack.size() != 0 && cur.data == arr[arrIdx]) {
if(cur.data == arr[arrIdx]) {
stack.pop();
arrIdx++;
answer += "-";
}
if(!stack.isEmpty()) {
cur = stack.peek();
}
}
}
}
if(stack.isEmpty()) {
return answer;
} else {
return "NO";
}
}
학습내용
- 클래스는 설계도면이다. 내가 만들고자 하는 형태를 만들 수 있고, 이것이 사용자 자료형이다.
이런 경우, 제네릭스도 내가 만든 자료형으로 지정해주어야 한다.
-> 원시 자료형이 아닌 자료형에는 내가 만든것들이 들어갈 수 있겠다. (맵, 셋, 리스트, 배열 등) - 객체의 내부 변수에 접근할 때는 변수로 받아준 후 . 연산자를 사용하여 접근한다.
마지막 수정일시: 2022-06-09 00:02
댓글남기기