끄적이기

[TIL - 2] 다시 기본부터 천천히

배씌 2025. 2. 26. 10:09

어제 공부를 하던 중, 아래와 같이 Java의 기초 중에 기초가 되는 부분에서 제대로 답변하지 못했다.

 

  • 리터럴(literal) 이란 무엇인가?
  • Java에서 클래스는 두 가지 근본적으로 다른 목적을 가지고 있다. 그 목적은 무엇인가?

분명히 이전에 공부할 때 봤던 내용들이고 아는 개념이라 생각했지만, 지나고 보니 모르는 개념인 것이다. 나름 Java에 대해 어느정도 자신이 있었는데, 너무 부끄러웠고, 또 너무 실망했다. 그래서 다시 한번 기본부터 시작해보려 한다.

 

지금 생각해보면 취업이나 다른 것들 때문에, 기본 개념을 이해하고 코드를 작성했다기 보다, 기능만을 익히고 사용하는데 급급했던 것 같다. 어제의 마음가짐과 동일하게, 이제는 기능이 아닌 조금 더 본질을 이해하고 내가 알고 있는 개념은 확실하게 정립하는데 집중할 것이다.

 

어제 들었던 말 중에 가장 인상 깊었던 말이 있다. 조급해 하지마라.

 

말 그대로이다. 백날 Spring이니, Kafka니 기술만 익혀봤자 본질을 모르면 성장할 수 없다. 단순히 어떤어떤 기술이 아닌, 프로그래밍 개념 자체를 성장시킨다는 생각으로 천천히 정진하겠다.


앞으로 TIL에서 학습한 내용들을 정리할 땐, 새로 학습한 내용들과 까먹어서 잘 기억이 나지 않았던 부분들을 위주로 기록해놓겠다.

 

학습한 내용

1.  클래스의 두 가지 의미

1) 객체를 설명하고 생성하는 것

2) 클래스에 포함된 변수와 서브루틴을 그룹화

 

Java에서 클래스는 두 가지 의미를 가지고 있다. 첫번째는 흔히 아는 개념이다. 객체를 만들어내기 위한 설계도, 혹은 틀이라고 말한다.

 

두번째는 사용하면서도 정확하게 설명하지 못한 부분이다. 이제는 확실하게 설명할 수 있다.

 

변수와 서브루틴을 그룹화 한다. 즉, 객체를 생성하지 않더라도 클래스 자체가 관련된 변수와 서브루틴(메서드)를 하나의 단위로 묶어 관리할 수 있다는 뜻이다.

 

대표적인 예시로 Math 클래스가 있다. 

public class Main {
    public static void main(String[] args) {
        double result = Math.sqrt(25); // Math 클래스의 sqrt 메서드 사용
        System.out.println("제곱근: " + result);
    }
}

 

👉 Math 클래스는 객체를 만들 필요 없이 Math.sqrt() 같은 메서드를 사용할 수 있다.
👉 이렇게 특정 기능을 수행하는 메서드들을 한 곳에 모아 놓고 필요할 때 불러쓰는 것이 클래스의 두 번째 의미(그룹화)이다.

 

위의 의미대로 라면, 우리가 직접 클래스를 만들어놓고 변수를 저장하거나 메서드를 그룹화 할 수도 있다.

public class StringUtil {
    // 공백을 제거하는 메서드
    public static String trimSpaces(String input) {
        return input.trim();
    }

    // 문자열을 대문자로 변환하는 메서드
    public static String toUpperCase(String input) {
        return input.toUpperCase();
    }
}

 

이렇게 클래스 안에 미리 메서드들을 그룹화 해놓으면 객체를 생성하지 않고도 바로 생성이 가능하다.

public class Main {
    public static void main(String[] args) {
        String text = "  hello world  ";

        // StringUtil의 메서드들을 사용 (객체 생성 없이)
        String trimmed = StringUtil.trimSpaces(text);
        String upper = StringUtil.toUpperCase(trimmed);

        System.out.println("Trimmed: " + trimmed);
        System.out.println("Upper: " + upper);
    }
}