본문 바로가기

Java

배열 1. 문자열을 정수로 바꾸는 방법class Solution { public int solution(String s) { return Integer.parseInt(s); }}2. 정수의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴하는 법class Solution { public long solution(long n) { char[] arr = String.valueOf(n).toCharArray(); java.util.Arrays.sort(arr); return Long.parseLong(new StringBuilder(new String(arr)).reverse().toString()); }} 3. 배열중에 특정 문.. 더보기
트러블슈팅2 - 코드 재사용성을 높이고 더 정확한 표현으로 수정 키오스크를 처음부터 새로 만들어봤습니다.제목에서 알 수 있듯이 코드 재사용성을 높이고 코드를 더 정확하고 안전하게 다루는것에 초점을 두어 구현해봤습니다. 처음 접해보는 내용들도 있어서 코드블록과 함께 코드 설명을 해보겠습니다.1. 불변화제가 이 개념을 접하게 된 이유는 저는 지금까지 데이터를 캡슐화시키기 위해서 접근제어자를 설정해주었습니다. 하지만 사실 외부에서 게터로 가져와서 add나 remove 기능을 사용할 수 있으니까 이거로는 캡슐화를 하지 못한다고 느꼈습니다. 왜냐하면 지금까지 저는 단순한 게터형식의 메서드만 만들어줬기때문이죠. 하지만, 제가 여기서 알려드릴 '불변화'라는 개념은 정말 제가 원했던 캡슐화를 시켜줄 수 있는 개념입니다. public Map getCart() { r.. 더보기
트러블 슈팅 - 키오스크 구현 이번 개인 프로젝트는 아래의 목표를 스스로 세워 진행했습니다.기능 별로 최대한 클래스를 나누어 구현코드의 재사용성을 최대한 고려1. 기능 별로 최대한 클래스를 나누고 나니 기능은 제대로 만들었지만, 코드 실행시 break나 코드 위치에 따라서 기능이 제대로 실행이 안되거나 순서가 꼬여버리는 상황이 많았습니다. 이를 해결하기 위해 10개가 넘는 클래스를 하나하나 찾아다니면서 결국 완성은 했지만, 아직 이 부분은 제가 미숙하다고 느껴서 다시 한 번 처음부터 만들어보면서 이 문제를 해결하기 위한 능력을 키우려고 합니다. 2. 코드의 재사용성을 최대한 고려하며 느낀 점은 처음에 리스트를 선언할 때가 가장 중요하다고 느꼈습니다. 리스트를 어떠한 형식으로 선언해주느냐에 따라 삭제나 추가 기능의 코드가 비약적으로 짧.. 더보기
트러블 슈팅 - 기능 별로 클래스를 나누어보자 3단계 계산기를 처음부터 다시 만들어보았습니다.어떤 순서대로 구현을 했는지에 초점을 맞추어 기록을 진행해보겠습니다. 우선, 핵심 기능들이 무엇이 있는지부터 파악을 해보았어요.실수와 사칙연산자를 입력받는 기능입력받은 데이터들을 활용한 연산 기능연산 결과들을 저장해주는 리스트 생성저장된 리스트들의 값을 조회해주는 기능가장 오래된 결과값을 삭제해주는 기능종료, 조회, 삭제 등 커맨드를 입력받고 실행해주는 기능예외처리 해주는 기능구현 순서를 생각해보면, 1. 실수와 사칙연산자들을 입력을 받는 클래스를 생성해준다.2. 입력받은 사칙연산자들을 enum 타입으로 관리를 해준다. (여기서 0으로 나누려고 했을 때와 올바른 사칙연산기호를 입력하지 않았을 때, 총 2가지의 예외를 발생시켜준다. 예외처리는 추후 단계에서 진.. 더보기
3단계 계산기 - try-catch 문을 사용한 예외처리 전 내용과 이어집니다.public static Operator fromSymbol(char symbol) { // 연산자 기호를 받아서 해당하는 Operator enum 값을 반환. 일치하는 것이 없으면 예외 처리 for (Operator op : Operator.values()) { if (op.symbol == symbol) { return op; } } throw new IllegalArgumentException("지원하지 않는 연산자입니다.");} 이 부분이 원래 throw new 가 아니라 return null; 이였다. 입력 받은 문자열이 저장된 사칙연산기호가 아니라면 null을 반환해주는 시스템이였는데, 이건 굉장히 잘못된 방법이.. 더보기
3단계 계산기 - Lambda 및 Stream을 활용한 인터페이스 구현 우선 전체 코드를 보면서 한 줄 한 줄 보자.아래는 람다, 스트림을 활용하여 저장된 연산 결과들 중 Scanner로 입력받은 값보다 큰 결과값들을 출력하는 인터페이스를 작성한 코드이다.package calculator;import java.util.List;import java.util.Scanner;@FunctionalInterfacepublic interface ResultFilter { void filter(List results); ResultFilter resultFilter = (results) -> { Scanner sc = new Scanner(System.in); System.out.print("기준값을 입력하세요: "); d.. 더보기
3단계 계산기 - enum 및 Generic을 활용한 데이터 분류 완성된 계산기 코드를 보면서 얘기를 해보자. 아래는 전체 코드이다.package calculator;import java.util.Objects;public class OperationExecutor { private final ResultHistory resultHistory; // ResultHistory 객체를 참조하는 resultHistory 필드 public OperationExecutor(ResultHistory resultHistory) { // ResultHistory 객체를 인자로 받아 resultHistory 필드에 저장 this.resultHistory = resultHistory; } public enum Operator { ADD('+.. 더보기
enum - 열거형 타입 enum 이란 ?: enum은 열거형 타입으로, 관련 있는 고정된 상수들을 하나로 묶을 수 있다. ADD, SUBTRACT, MULTIPLY, DIVIDE 등의 연산자들을 Operation이라는 enum으로 관리할 수 있다.코드 가독성, 유지보수성, 타입 안정성을 높여준다. 가독성Operation.ADD처럼 명확하게 표현됨타입 안정성잘못된 값은 컴파일 단계에서 오류 발생, 더 안전하다유지보수성연산 추가/수정이 쉽다 (e.g., 나중에 MOD, POWER 등 확장 가능)switch문 없이도 처리 가능apply() 같은 메서드를 enum 안에 정의해서 직접 계산 가능기호 매핑 편리"+" 등의 기호를 연산자와 연결해서 입력값 처리나 출력에 활용 가능 char는 그냥 자유롭게 문자 쓰는 메모장 같은 느낌이고,e.. 더보기