본문 바로가기

전체 글292

2022.09.21. ▶ 학습 전(계획) 학습 목표는 무엇인가? Java에서의 데이터 타입들을 JSON으로 변경하는 기능을 구현할 수 있다. 이미 알고 있는 내용은 무엇인가? 전에 스프링 관련해서 학습했을 때, Json을 써서 데이터를 표현한 적이 있었다. 오늘 다루는 Json 관련 내용들을 새롭게 배운다는 마인드로 확실히 배워놔야겠다. ▶ 학습 후(점검 및 평가) 새롭게 배운 내용은 무엇인가? Java에서 사용하는 데이터 타입들은 JSON으로 변경하면 어떻게 변하는지. 재귀를 이용해서 StringifyJSON을 어떻게 구현하는지에 새롭게 배웠다. 다른 사람에게 설명할 수 있는가? 데이터가 String, Integer, Boolean 값으로 들어온 경우에, 어떻게 반환되는지 설명할 수 있다. 아직 이해되지 않은 내용은 무엇인.. 2022. 9. 21.
재귀 함수와 메모리 사용량 관계 _ 꼬리 재귀 재귀 함수는 반복하여 매서드를 호출한다. 그 과정에서 지역 변수, 매개 변수, 반환 값을 모두 process stack에 저장하게 된다. 이러한 과정은 반복문보다 더 많이 메모리를 사용하기 때문에, 성능이 좋지 않다. 스택 오버플로우를 일으킬 위험이 있다. 이러한 단점을 보완하기 위한 최적화 방법이 바로 꼬리 재귀이다. 꼬리 재귀는 재귀 호출이 끝난 후, 현재 함수에서 추가적인 연산을 요구하지 않는 재귀의 형태이다. 이는 컴파일러가 선형으로 코드를 처리하도록 알고리즘을 바꿔서 스택을 재사용 가능하게끔 한다. 단, 컴파일러가 이 기능을 지원해야 사용 가능하다. 다음 코드를 예시로 일반적인 재귀 함수와 꼬리 재귀를 파악해보자. 위 두 코드 모두 같은 결과를 출력한다. 좌측의 일반적인 재귀 함수는 스텍이 계속.. 2022. 9. 21.
재귀(Recursion) 재귀란 '본디의 곳으로 다시 돌아오는 것' 이라는 뜻이다. 말 그대로, 재귀 함수는 메서드 내에서 다시 본 메서드를 호출하는 것을 말한다. 다음은 재귀의 대표적인 예제인 팩토리얼을 재귀 호출로 구현한 메서드 예시 코드이다. return에 의한 반환 값에 다시 한 번 본 메서드가 들어가게 된다. 이러한, 동작 원리를 재귀라고 한다. 재귀의 장점은 다음과 같다. 불필요한 반복문을 줄일 수 있으므로, 코드가 간결해지고 수정이 용이하다. 여러 변수를 사용하지 않아도 된다. 재귀의 단점은 다음과 같다. 반복문과는 달리, 코드의 흐름을 한눈에 알아보기 어렵다. 반복문보다 더 많은 메모리를 사용하게 된다. 메서드를 호출하고 종료된 이후에, 복귀를 위한 컨텍스트 스위칭 비용이 발생한다. 재귀함수는 조건이 존재한다. 재.. 2022. 9. 20.
2022.09.20. ▶ 학습 전(계획) 학습 목표는 무엇인가? 재귀 함수 이미 알고 있는 내용은 무엇인가? 알고리즘 문제를 통해 재귀 함수에 대해 알게 되었다. 메서드 내에서 다시 메서드를 호출하는 원리로 알고 있는데, 잘 알고 있는 것인지, 이번 학습을 통해 점검해봐야겠다. 오늘도 화이팅! ▶ 학습 후(점검 및 평가) 새롭게 배운 내용은 무엇인가? 재귀 호출에 대해 자세히 배웠다. 어떤 원리로 호출이 되는지, 어떠한 단계로 밟아나가야 재귀 호출 메서드를 구현하기 쉬운지에 대해 알 수 있었다. 다른 사람에게 설명할 수 있는가? 원리에 대해서 설명할 수 있다. 아직 이해되지 않은 내용은 무엇인가? 재귀를 이용해서 메서드를 구현하는 것이 아직 너무나 익숙치 않다. 이해되지 않은 내용을 보완하기 위해서 나는 무엇을 할 수 있는가.. 2022. 9. 20.
isEmpty()와 isBlank() 차이 isEmpty() Java 6 이후 추가된 메서드이다. 문자열의 길이가 0인 경우에, true를 반환한다. isBlank() Java 11 이후 추가된 메서드이다. 문자열의 길이가 0이거나, 빈 공백으로만 이루어진 문자열인 경우에, true를 반환한다. 2022. 9. 20.
Section 1 회고 드디어, Section 1이 끝이 났다. (일단 고생한 나에게 박수👏👏👏) 어떻게 지나갔는지도 모르겠다.. 정말 빠르게 시간이 흐른 것 같다. 살면서, 이렇게 무언가에 열중해본 게 정말 오랜만이지 싶다. Section 1에서 배운 내용들을 간략하게 살펴보면, 프로그래밍 기초 / Publishing / Git / Linux / 객체지향 프로그래밍 / Java 이 정도를 전체적으로 배웠다. 이 백엔드 부트캠프에 들어오기 전에, 조금씩은 다뤄보고 들어왔지만 솔직히 이 Section 1 과정을 학습하면서, 모든 걸 새로 배우는 듯한 느낌이었다. 그만큼, 기존에 알고 있던 내용들에 더해 세세한 지식들이 채워진 게 아닌가 싶다. 이번 Section1 기간 동안, 잘한 점과 못한 점을 생각해보면, 일단 잘한 점은, .. 2022. 9. 19.
컬렉션과 스트림 차이점 컬렉션 스트림 주된 목적 특정 자료구조로 데이터를 저장하는 것 데이터 가공 처리 데이터 수정 여부 데이터 추가 및 삭제 가능 데이터 추가 및 삭제 불가능 오로지 데이터 소스를 읽어서 소비하기만 함 Iteration 형태 for문 같은 걸로 외부 반복 operation 메서드 내부에서 보이지 않게 반복 탐색 횟수 여러 번 탐색 가능 한 번만 탐색 가능 데이터 처리 방식 Eager Lazy & Short-Circuit 2022. 9. 18.
자료 구조 체계도 (출처 : https://techvidvan.com/tutorials/java-collection-framework/) 2022. 9. 18.
Map 인터페이스를 구현한 클래스에서 Iterator 사용하기 모든 Collection 인터페이스를 구현하는 클래스(ArrayList, HashSet, TreeSet...)들은 iterator() 메서드를 사용할 수 있다. 그러나, Map 인터페이스를 구현하는 클래스(HashMap, TreeMap...)들은 사용이 불가하다. 그래서, 다음 예시 코드처럼 Set의 형태로 바꾼 후, iterator() 메서드들을 사용하도록 한다. 자료 구조의 체계를 다시 확인해보고 싶다면 https://jaeyoungb.tistory.com/103를 참고하자. 다음 예시 코드를 참고해서 사용해보자. 2022. 9. 18.