250828 TIL

2025. 8. 28. 18:02·내배캠 끄적끄적/Today I Learned

 

❗어떤 문제가 있었는지

  • 26일자 진행했던 음료 자판기 코딩 복습 과정에서의 오류 발견
    • scanner.nextLine()으로 입력을 받을 때 앞 뒤의 공백이나 불필요한 공백이 같이 입력되는 경우 조건문을 만족하지 못해 containsKey 검사에서 실패하게 됨
  • 27일자 진행했던 단어 맞추기 게임 코딩 진행 및 복습 과정에서 초기 실행 화면 이후의 코드 구성에 어려움이 있었음
    • 코드 실행에 따른 초기 화면 구성에 대한 고민을 진행
      • 정답의 자릿수와 현 상태를 나타낼 수 있도록 구성해야 함
      • 주어진 단어들에 대하여 코드 실행하는 때 마다 랜덤하게 추출하여 결과값에 노출해야 함
    • 기존 학습으로 활용이 필요했던 함수 구성
      • 변수 선언의 종류는 몇가지로 구성해야 하는지
      • Random()
      • 메서드
    • 개별적으로 추가 학습이 필요했던 개념
      • StringBuilder
      • CharAt(i)
      • private static final String[] WORDS 에서의 final로 선언하는 이유

📝 내가 시도해본 것들

  • 오류에 대한 해결책을 찾기 위해 자주 사용하는 표준 클래스에 대한 이해도가 필요했다고 판단하였고 서칭을 진행하였음
    • 대표적인 예로는 trim(), substring(), replace(), toUppercase() 등을 확인할 수 있었음
      • trim() : 문자열 공백 제거
      • toLowercase(),  toUppercase() : 글자(알파벳) 소문자화, 대문자화
      • substring() : 문자열의 특정 부분을 잘라내는 데 사용
      • replace() : 문자열을 치환하는 데 사용

 


💡어떻게 해결했는지

  • 위의 예제에서 사용할 공백에 대한 이슈를 해소하는 경우는 trim() 을 사용함으로서 이슈를 해소할 수 있게 됨
    • nextLine() 의 경우 입력된 한 줄 자체를 읽기때문에 공백이 포함된 경우 입력값을 확인하는데 조건식을 만족하지 못하는 오류가 발생
    • nextInt() 는 숫자만 읽고, 숫자 뒤에 오는 공백 또는 엔터는 무시하게 됨, 단 숫자가 아닌 문자가 섞이면 에러가 발생

👍무엇을 새롭게 알았는지

  • StringBuilder : String은 불변 객체, 한번 생성 되면 내부 문자열을 바꿀 수 없음. 이런 상황을 개선해주기 위해서 StringBuilder를 사용하여 내용을 직접 수정 가능하게 하고 이를 통해 새로운 객체를 만들지 않고 기존 공간에서 작업할 수 있음
    • 문자열 연결, 삽입, 삭제, 치환 등을 빠르게 수행할 수 있음
    • 사용하기 좋은 상황 :
      • 반복문 안에서 문자열을 계속 붙이는 상황 / 대량의 문자열을 조작해야 할 때 / printf처럼 문자열을 쌓아야 할 경우 

StringBuilder sb = new StringBuilder("Hello");

// 문자열 뒤에 붙이기
sb.append(" World");  // "Hello World"

// 문자열 특정 위치에 삽입
sb.insert(5, " Java"); // "Hello Java World"

// 문자열 일부 삭제
sb.delete(5, 10); // "Hello World"

// 문자열 일부 변경
sb.replace(0, 5, "Hi"); // "Hi World"

// 문자열 뒤집기
sb.reverse(); // "dlroW iH"

// String으로 변환
String result = sb.toString();

 

  • CharAt(i) : CharAt 함수란 String 타입의 데이터(문자열) 에서 특정 문자를 char 타입으로 변환할 때 사용하는 함수
    • 예시)
public class Test {
	public static void main(String[] args) {
    // 변수 선언
    String example = "안녕하세요";
    char target1;
    char target2;
    char target3;
    
    target1 = example.charAt(0); // 0번째 글자를 target1 에 저장
    target2 = example.charAt(1); // 1번째 글자를 target2 에 저장
    target3 = example.charAt(2); // 2번째 글자를 target3 에 저장
    
    System.out.println(target);
    System.out.println(target2);
    System.out.println(target3);
}
  • 결과

 

  •  static final로 변수를 선언하는 이유는 상수를 만들기위한 것
    • final : 한번 값을 넣으면 변경할 수 없음 → 불변성 확보
    • static : 클래스 차원에서 하나만 존재하는 변수
      • 객체마다 따로 생성되지 않고, 메모리에 딱 하나만 로딩됨
      • static final은 모든 인스턴스가 공유하는 상수가 됨
    • private : 캡슐화 → 외부 클래스에서 직접 접근 못하게 막음

      이에 따라 private static final을 쓰는 이유는 클래스 안에서만 사용하는 변하지 않는 전역 상수를 만들기 위한 선언 방식

 

'내배캠 끄적끄적 > Today I Learned' 카테고리의 다른 글

250901 TIL  (2) 2025.09.01
250829 TIL & 사전캠프 마무리  (15) 2025.08.29
250827 TIL  (6) 2025.08.27
250826 TIL  (4) 2025.08.26
250825 TIL  (4) 2025.08.25
'내배캠 끄적끄적/Today I Learned' 카테고리의 다른 글
  • 250901 TIL
  • 250829 TIL & 사전캠프 마무리
  • 250827 TIL
  • 250826 TIL
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로세스와 쓰레드
    git
    백엔드 기초다지기
    SpringSecurity
    HTML&CSS
    RestTemplate
    MVC
    BEAN
    Github
    Spring
    객체지향
    실시간 데이터 처리
    네트워크 기초
    thymleaf
    Spriingboot
    WebSocket
    웹소켓
    Java 문법기초
    String.format
    algorithm
    백엔드 기초
    다형성
    JPA
    for문
    jsp
    java
    Stomp
    객체지향프로그래밍
    경합조건과 교착상태
    Til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
250828 TIL
상단으로

티스토리툴바