본문 바로가기

Java8

[우아한테크코스 6기] 1주차 프리코스 회고록 우아한 테크코스 참여를 시작하며… 올해에도 역시 낙엽과 함께 우테코의 계절이 왔다!!! 작년에도 프리코스에 참여했지만,,, 오프라인 코테도 참여 못하고 떨어졌다. 그래도 몰입하여 4주간의 프리코스를 참여하고, 매주 주어진 미션을 수행한 경험이 나에게 무척이나 유익했다. 프리코스 참여가 전원 확대되면서 누구나 참여할 수 있었고, slack을 통해 서로 으쌰으쌰하고 다른 사람들의 코드를 리뷰하면서 새로운 지식도 쌓을 수 있었기 때문이다. 다만,,, 1년전의 나는 너~무 바빴기 때문에 우테코에 완전 몰입할 수 없었고ㅎㅎ 항상 바쁘게 과제를 했던게 아쉬움으로 남았다. 그래서 이번 6기 프리코스에서 내가 얻어가고 싶은 것은 크게 2️⃣가지이다. 자바와 객체지향 익히기: 아직 모르는게 많다. 왜 코드를 이렇게 작성.. 2023. 10. 29.
Java String이 불변(immutable)인 이유 알고리즘 문제를 풀다가 dfs에서 다음 값을 업데이트해줄 때, 궁금증이 생겼습니다. 이 코드는 for(int i = 0; i < tickets.length; i++) { if(!visited[i] && now.equals(tickets[i][0])) { visited[i] = true; dfs(tickets[i][1], count+1, trip + "," + tickets[i][1], tickets); visited[i] = false; } } 이렇게도 쓸 수 있는거 아닌가요?! for(int i = 0; i < tickets.length; i++) { if(!visited[i] && now.equals(tickets[i][0])) { visited[i] = true; trip += ","; trip +.. 2023. 10. 27.
[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리, GC 알고리즘, G1 GC Garbage Collection(가비지 컬렉션)이란? C언어에서는 malloc() 함수로 할당한 메모리를 사용하지 않을 때, 개발자가 직접 free() 함수로 해제한다. Java는 개발자가 메모리를 직접 해제해 주는 경우가 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 정리해 주기 때문이다. 이번 글에서는 가비지 컬렉션의 개념과 동작 원리, Java9 이후 기본 GC 알고리즘인 G1 GC에 대해 알아보자. 먼저 가비지(Garbage)는 유효하지 않은 메모리로, 더 이상 참조되지 않아 사용하지 않은 메모리이다. 이때 가비지 컬렉션(Garbage Collection, gc라고도 한다)는 메모리 누수를 방지하기 위해 주기적으로 메모리를 청소한다. 그럼 메모리는 언제 점유되고, Garbage는 .. 2023. 9. 22.
Builder 패턴이란? 객체를 생성하는 방법에는 생성자 패턴, 정적 팩토리 메서드 패턴, 수정자 패턴, 빌더 패턴이 있다. Builder 패턴은 무엇이고 어떤 특징이 있을까? 왜 @Builder 패턴을 사용할까? Effective Java 아이템2를 살펴보면, "생성자에 매개변수가 많다면 빌더를 고려하라."를 확인할 수 있다. 정적 팩터리와 생성자 방식은 매개변수가 다양하면 대응이 어렵다는 단점이 있다. 이를 해결하기 위해 1) 점층적 생성자 패턴을 사용할 수 있다. public class User { private final String name;// 필수 private final int age;// 선택1 private final String gender;// 선택2 // 필수 생성자만 필요한 경우 public User(S.. 2023. 9. 20.
[Onboarding] 문제1, 문제2 지난 가을에 공부한 참여한 우테코 프리코스 과제들을 리펙토링하면서 부족한 내용을 채워보려고 한다! 화이팅 :) 온보딩 과제에서 얻어가고 싶은 내용들은 헷갈리는 문법 정리 위주로 공부가 될 것 같다. 더불어 이미 제출한 사람들의 결과물을 보면서 부족한 부분을 채울 예정이다. https://github.com/woowacourse-precourse/java-onboarding GitHub - woowacourse-precourse/java-onboarding: 온보딩 미션을 진행하는 저장소 온보딩 미션을 진행하는 저장소. Contribute to woowacourse-precourse/java-onboarding development by creating an account on GitHub. github... 2023. 6. 28.
toString() 메서드 올바르게 사용하기 첫번째 로또 미션을 수행하면서 결과값을 출력할 때 toString()을 재정의하여 구현하였다. 우리가 toString()을 사용한 이유는 1) getter의 사용을 지양하고, 2) 결과값을 쉽게 출력할 수 있기 때문이다. 하지만 이 경우 출력의 요구사항이 바뀐다면, Domain이 View에 의존하기 때문에(즉, View가 바뀌면 Domain도 바뀐다.) 적절하지 않다는 피드백을 받았다. (Update 2022.06.27) 위 피드백에 대한 추가 피드백으로 Domain의 toString()을 구현했을 뿐, View에 의존한다고 보기 어렵다고 한다. View에서는 Domain의 toString()을 받아서 Domain을 변경하지 않고도 출력 형식을 자유롭게 변경할 수 있기 때문이다. 피드백을 반영하며 toS.. 2023. 5. 17.
nextLine() 잘~ 사용하기 로또 미션을 수행하면서 구입 금액과 당첨 번호를 입력받는 기능을 구현하였다. 예상 당첨 번호는 공백을 포함한 문자열로 입력을 받아야 했기 때문에 아래와 같이 nextLine()으로 입력을 받았다. 구입 금액과 당첨 번호는 Enter를 사용해 연속적으로 받을 때 버퍼에 남아있는 개행 문자를 처리하기 위해 각각의 Scanner 객체를 만들었다. public class Main { public static void main(String[] args) { Scanner scanner1 = new Scanner(System.in); Scanner scanner2 = new Scanner(System.in); int money; String winningLottoNumber; System.out.println("구.. 2023. 5. 17.
[Java] 예외처리(exception handling)-1 1. 프로그램 오류 프로그램이 실행 중 어떤 원인에 의해서 오작동 하거나 비정상적으로 종료되는 경우, 결과를 초래하는 원인을 프로그램 에러 또는 오류라고 한다. 컴파일 에러: 컴파일 시에 발생하는 에러 런타임 에러: 실행 시에 발생하는 에러 논리적 에러: 실행은 되지만, 의도와 다르게 동작하는 것(ex. 개수가 음수가 나올 때) 컴파일이 성공적으로 마쳤다고 해서 프로그램의 실행 시에도 에러가 발생하지 않은 것은 아니다. 프로그램이 실행 중 동작을 멈추거나, 종료되는 경우처럼 런타임 에러가 발생할 수 있다. 런타임 에러를 방지하기 위해서는 프로그램 실행도중 발생할 수 있는 경우의 수를 고려하여 대비를 하는 것이 필요하고, 자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 '에러(error.. 2023. 5. 17.