1 분 소요

[객체지향] 클래스는 설계도면!

연습문제를 풀다가 클래스를 만들어서 사용하게 되어 해당 내용을 정리한다.


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

카테고리:

업데이트:

댓글남기기