[TIL] 08일차 _ Java 문법 종합반 #3 & 계산기 프로젝트 #1

Seoyeon Lee·2025년 10월 15일

Today I Learned ...

오늘은 코드카타 알고리즘과 SQL 1번 문제를 풀고, Java 문법 종합반 강의의 3강을 들었다.
그리고, 계산기 프로젝트의 Lv.1을 완성했다.


🗒️ 코드카타 #1

코드카타는 코딩에 익숙해지기 위해 매일 반복 연습하는 것을 말한다.
프로그래머스에서 제공되는 코딩테스트 문제풀이 중 입문 문제로 알고리즘 연습을, SQL Kit로 SQL 연습을 진행한다.

SQL을 연습하기 위해서는 데이터를 직접 다 만들어서 환경 세팅을 한 뒤에 진행해야한다는 한계가 있었는데,
위 사이트를 통해 진행하면 기본적인 환경 구성이 다 되어있기에 코드만 실행해볼 수 있다는 장점이 있다.
알고리즘 문제도 마찬가지로 기본 코드만 생성하면, 테스트를 알아서 해주기에 훨씬 편리하다.

오늘 진행한 SQL 문제is not null을 통해 null이 아닌 값을 가지고 있는 데이터만 출력하는 것이었다.
아직 1단계 문제여서 그런지, 푸는 데에 큰 어려움은 없었다.

그리고, 알고리즘 문제는 제한 범위 내의 두 수를 입력받았을 때, 두 수의 차를 출력해내는 문제였다.
홈페이지에서 문제를 푸는 데에는 큰 어려움이 없었지만,
Scanner를 통해 두 수를 입력받고, 계산을 할 수 있게 하고 싶었다.
그래서 직접 새로운 클래스를 생성하고, 입력 칸까지 만드느라 시간이 조금 걸렸다.

각각의 문제에 대한 나의 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기


📚 3강 _ 객체지향의 특징

객체지향의 특징은 캡슐화, 상속, 추상화, 다형성으로 총 4가지가 있다.

먼저, 캡슐화란 캡슐처럼 데이터를 보호함으로써 정보를 보호하고, 필요한 경우에만 안전하게 접근할 수 있도록 하는 것이다.
이는 접근 범위를 제한하는 접근제어자(Access Modifier) 키워드를 통해서 설정할 수 있다.

접근제어자클래스 내부패키지 내부상속한 클래스전체 공개
publicOOOO
protectedOOOX
defaultOOXX
privateOXXX
public class Example {
	public String ex1;
    private String ex2;
}

public class Main {
	public static void main(String[] args) {
    	Example example = new Example(); // 접근 가능
        example.ex1; // 접근 가능
        example.ex2; // 접근 불가능
    }
}

필요에 따라 위 4가지 키워드 중 하나를 선택해서 부여하면 된다.

만약 private으로 지정한 객체의 속성에 접근하고 싶다면, getter 혹은 setter를 활용하면 된다.

두 번째로, 상속이란 클래스 간의 관계를 부모(상위), 자식(하위)로 바라보는 개념이다.

extends를 통해서 상속 관계를 구현할 수 있다.
상속을 함으로써 자식 클래스는 부모 클래스의 내용을 물려받아 그대로 재사용할 수 있고,
필요하다면 부모 클래스의 기능을 유지한 채 자식 클래스에서 새로운 메서드를 추가함으로써 기능을 확장할 수 있다.

super 키워드를 통해 부모 클래스의 변수 혹은 메서드에 접근할 수 있고,
메서드 오버라이딩을 통해 부모의 메서드를 자식 클래스에서 필요에 맞춰 변경하여 재정의할 수도 있다.

abstract 키워드를 통해 추상 클래스를 생성할 수 있는데,
추상 클래스를 사용하면 하위 클래스에 특정 메서드 구현을 강제시킬 수 있다.
추상 클래스는 일반 클래스처럼 변수와 메서드를 가질 수 있지만, 추상 클래스로 객체를 생성하는 것은 불가능하다.
앞서 배운 인터페이스와 비슷한 역할을 하지만, 인터페이스는 표준을 제공한다면,
추상 클래스는 계층적 구조를 선언하기 위해 사용하고, 인터페이스와는 다르게 변수 선언이 가능하다는 장점이 있다.

세 번째로 추상화란 불필요한 정보를 제거하고, 본질적인 특징만 남기는 것을 말한다.
추상화의 계층적 특징을 활용하면 유지보수성이 좋은 프로그램을 만들 수 있다.
인터페이스 혹은 추상클래스를 활용해서 추상 계층을 표현할 수 있다.

마지막으로, 다형성은 하나의 타입으로 여러 객체를 다룰 수 있다는 뜻이다.
단, 이때 자식 클래스에서 새롭게 생성한 기능을 활용하지 못하게 되는 경우가 발생하게 된다.
그래서 필요 시 자식에서 부모로, 부모에서 자식으로 형 변환(캐스팅)을 시키며 필요한 내용들을 사용할 수 있다.

자세한 설명과 실습 내용은 노션을 통해 정리해두었다.
Notion 확인하기


🖥️ 계산기 프로젝트 #1

Java 1주차에는 계산기를 만드는 과제가 있다.
각 요구 조건에 따라 Lv.1, Lv.2, Lv.3으로 나뉘어지는데, 오늘은 Lv.1의 계산기를 만들었다.

Lv.1 계산기의 가장 큰 특징은 클래스를 따로 만들지 않고 구현하는 것이다.
Scanner를 통해 2개의 값과 사칙연산 기호를 받으면, 입력된 값에 맞는 계산을 진행한 후 결과를 보여주는 것이다.
그리고, 계산이 완료된 후에는 계산 지속 여부를 확인한 뒤, 계산기를 재실행하거나 종료하는 것까지가 Lv.1 계산기의 요구 조건이다.

Lv.1 계산기를 구현하며 생긴 문제는 2가지가 있었다.

첫 번째는 while문 내부에서 사용했던 변수를 while문 바깥에서 사용할 수 없었던 것이다.
처음 while문을 작성할 때에는 변수의 선언과 값 할당을 동시에 진행했었는데,
변수 선언을 while문 바깥에서 진행하고, 값 할당은 while문 내부에서 진행함으로써 비교적 쉽게 해결할 수 있었다.

두 번째 문제는 지속 여부 확인을 위한 문자열 스캐너를 받을 때, 스캐너가 값을 입력받지 않고 넘어가버린다는 것이었다.
이 부분을 해결하는 데에 가장 많은 시간이 걸렸다.
처음에는 전체를 감싸고 있는 while문에 오류가 생긴 것이라고 판단하여서 다시 작성해보기도 했다.
하지만 해결되지 않아서 구글링을 해본 결과, 앞선 스캐너에서 입력된 개행문자(enter)가 처리되지 않은채 넘어와서 처리가 되어버린 탓이었다.
그래서 내가 필요로 하는 스캐너 앞에 개행문자 처리를 위한 스캐너를 추가해줌으로써 해결이 되었다.
이는 스캐너의 nextLine 메서드의 기본 설정으로 생기는 문제라고 한다.

이 2가지 문제를 제외하고는 Lv.1 계산기는 큰 어려움 없이 해결할 수 있었다.
제공된 기능 가이드에 있는 내용들은 충족하였지만 개인적으로 추가해보고 싶은 내용들이 있다.
첫 번째는 숫자를 입력받는 스캐너에 숫자가 아닌 값을 입력했을 때의 처리이고,
두 번째는 한 번에 숫자와 사칙연산 기호를 입력하도록 만드는 것이다.
위 내용은 먼저 다른 레벨의 계산기를 구현한 뒤에 다시 시도해보려고 한다.

자세한 과정은 노션을 통해 기록해두었고,
작성한 코드는 깃허브를 통해 업로드해두었다.


🙃 오늘의 느낀점

처음 개인 프로젝트를 진행한다고 했을 때, 내가 정말 할 수 있을까 겁을 먹고 시작했는데, 막상 시작하니 아무것도 아니었다.
계산기 Lv.2를 시작하면 또 달라질수도 있지만...
그래도 자바에 대해 아무것도 몰랐던 내가 직접 하나의 프로그램을 만들었다는 것에 매우 큰 성취감을 느끼고 있다.

자바에 대해 공부하면서 점점 새로운 개념이 많아지고 있다.
하나에 대해 겨우 이해해서 넘어가면, 또다시 이해하지 못할 개념들이 생기고,
분명 이해했다고 생각했는데 적용을 해보려니 왜 이렇게 작동하는 것인지 이해가 안 된다.
하나씩 하나씩 정리해가다보면 언젠가 모든 궁금증들이 해결될 날이 오리라 믿는다...

profile
백엔드 개발자 지망생

0개의 댓글