본문 바로가기

BE9

Math 클래스 메소드 프로그래머스에서 '정수 제곱근 판별' 문제를 풀면서 if문과 while문을 사용해서 풀었는데 다른 사람들의 풀이를 보니 java.lang 패키지에 포함되어 있는 Math 클래스를 사용한 것을 보았다.  Math 클래스에서는 수학적인 연산을 위한 메소드들을 제공하며, Math 클래스의 메소드를 사용하면 식을 조금 더 간단하고 직관적으로 알 수 있을 것 같기 때문에 Math 클래스의 메소드에 대해서 알아보겠다. 그리고 프로그래머스에서 Math 클래스 메소드를 활용할 수 있는 프로그래머스 문제도 풀어보도록 하겠다. 구분메소드절댓값 / 부호abs, signum최댓값 / 최솟값max, min소수점 올림 / 버림ceil, floor, round, rint제곱 / 제곱근pow, scalb, sqrt, cbrt, hy.. 2024. 5. 2.
정수 오버플로우(Integer overflow) 정수형 오버플로우는 정수 값이 증가하면서 허용된 가장 큰 값보다 커져 실제 저장되는 값이 의도치 않게 아주 작은 수 이거나 음수가 되는 것이다. 특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용자가 제공하는 입력값을 사용하고 그 과정에서 정수형 오버플로우가 발생하는 경우 보안상 문제를 유발할 수 있다. 프로그래머스 문제를 풀면서 정수 오버플로우를 겪은 문제에 대해서 써보겠다. 전날 프로그래머스 Lv.1 문제(아래 참고)를 푸는데 배열과 형변환을 활용해서 해결해야 하는 문제였다. 풀이 도중 형변환을 한 후 답을 작성했다. 코드 실행은 모두 성공하고 제출 후 채점하기를 눌렀는데... 테스트 케이스 13, 14를 통과하지 못했다... 1시간 동안 생각해봤는데 해결되지 않아서 식을 바꿔봤는.. 2024. 3. 20.
Java 문법 charAt, join, repeat 앞으로 프로그래머스에서 문제를 풀면서 다른 사람의 풀이를 보면서 코딩을 하면서 유용하게 쓸 것 같은 Java 문법을 정리해보려고 한다. charAt() char은 기본형 변수로 한 글자만 저장할 수 있는 변수이다. Scanner로 입력을 받을 때는 String 타입으로 밖에 입력받을 수 없다. 그래서 필요한 것이 charAt()이다. charAt()는 String으로 저장된 문자열 중 한 글자만 선택해서 char타입으로 변환해준다. // 예시 char c1 = ''; char c2 = ''; String str1 = new String(); str1 = "가나다라마바사"; c1 = str1.charAt(0); c2 = str1.charAt(2); System.out.println(c1); System.o.. 2024. 3. 17.
삼항 연산자 최근 코딩테스트 연습을 다시 시작하면서 프로그래머스에서 문제를 풀면서 깃허브에 기록을 같이 올렸었다. 이전에 문제 푼 것들을 다시 리뷰하면서 if문을 너무 많이 쓰면서 코드가 복잡해지는 것을 보고 간단하게 나타낼 수 있는 코드는 삼항 연산자를 써도 나쁘지 않을 것 같다는 생각이 들어서 공부하면서 사용해 봤다! 내 주관적인 생각으로는! 모든 코드에서 삼항 연산자를 쓰는 것은 한눈에 알아보기 쉽지 않기 때문에(가독성이 떨어짐) 가벼운 로직들을 처리할 때만 사용하는 것이 좋다. 삼항 연산자 문법 (조건문) ? 참일 때 값 : 거짓일 때 값 이렇게만 말로만 보면 이해하기가 어려우니 예시를 통해 알아보자 //예시 int result = number < 5 ? 0 : 1; //풀이 number가 5보다 작을 경우 .. 2024. 3. 13.
Java에서 CSV파일 읽기 CSV(Comma, Separated Values) 얼마 전 CSV 파일을 불러와야 하는 작업이 있었다. Java를 하면서 CSV 파일을 불러와서 작업하는 것은 처음이였는데, 생각보다 쉽고 엄청 유용할 것 같아서 정리해본다. CSV 파일은 엑셀형식으로 되어 있으며 파일의 입출력을 말한다. CSV 형식에서는 데이터의 각 요소를 콤마(,)로 구분하고 개행 문자가 그대로 데이터의 행 구분을 나타낸다. 1 고디바 20000원 고급 2 페레로로쉐 5000원 일반 3 가나초콜릿 2000원 일반 // 예시 1, 고디바, 20000원, 고급 2, 페레로로쉐, 5000원, 일반 3, 가나초콜릿, 2000원, 일반 위와 같이 CSV 파일이 있을 경우 예시처럼 데이터를 읽어들이고 싶을 때가 있다. 이럴 때 java파일에서 .. 2024. 3. 9.
비즈니스 로직(Buisness Logic) 스프링부트 블로그 개발 프로젝트를 진행하면서 비즈니스 로직을 Controller와 Service 중 어디에 작성해야 할지 고민이 되었다. 그래서 구글링을 하면서 알게 된 것과 내 생각을 적어본다. 비즈니스 로직이란? 어떤 프로그램에서 request의 처리나 특정한 기능 수행을 위해 데이터를 처리하는 실질적인 로직을 뜻한다. 쉽게 말해, 사용자의 요구사항을 해결하기 위한 실질적인 코드이다. 실제 MVC 패턴에서는 비즈니스 로직이 Service Layer로 제한되어 담겨있고 실질적인 데이터 처리는 모두 Service Layer에서 일어난다. 기본 웹 어플리케이션 계층 구조 Controller : 웹 MVC의 컨트롤러 역할 Service : 핵심 비즈니스 로직 구현 Repository : DB에 접근, 도메인.. 2024. 2. 29.
RequiredArgsConstructor @RequiredArgsConstructor // RequiredArgsConstructor는 final(필수 필드,값)에 대해서 생성자 만드는 역할 public class AuthServiceImplement implements AuthService { private final UserRepository userRepository; } @RequiredArgsConstructor public class AuthServiceImplement implements AuthService { // implement란? - 인터페이스의 구현체 // 필드를 통한 의존성 주입 (인스턴스를 만드는 것이 아닌 외부에서 의존성 주입) @Autowired(Bean으로 등록되어 있는 것을 자동으로 주입) private Use.. 2024. 2. 28.
Java 클래스 Integer 클래스 정수를 활용하여 수행 가능한 다양한 메서드 및 상수 제공 int num1 = 10, num2 = 20; // 여러 값을 받았을 때 큰 값 추출 Integer.max() // 2진수 추출 Integer.toBinaryString() // 8진수 추출 Integer.toOctalString() // 16진수 추출 Interger.toHexString() Character 클래스 문자 데이터에 대한 다양한 처리를 위한 상수 및 메서드 제공 char ch = 'A'; // isXXX()메서드 : 특정 대상인지 여부 판별 // 대문자 여부 Character.isUpperCase(ch) // 대문자로 변환 Character.toUpperCase(ch) // 소문자 여부 Character.isL.. 2024. 2. 27.