BackEnd/Java 20

우테코 프리코스 1주차 미션 회고 및 정리 - 1

우아한 테크 코스 1주차 미션인 문자열 덧셈 계산기를 구현하는 과정과 이를 통해 어떤 점에서 어려움을 겪었고 어떤 점을 개선했는지 정리하겠습니다.문자열 덧셈 계산기기능 요구 사항입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현한다.쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다.예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다.예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결..

BackEnd/Java 2024.10.21

[Java] 스트림이란? 스트림의 사용이유와 컬렉션과 비교 예제

스트림이란? 스트림의 사용이유Stream자바 8 에서 추가된 Stream은 데이터 처리기능을 가지고 있으며, 데이터 처리 효율을 높여줍니다.Stream의 사전적 의미는 ‘시냇물’이라는 의미를 가지며, 연속적인 사물이나 사람의 흐름 이라고 정의합니다.Stream은 시간상에 나타나는 일련의 데이터 요소라고 정의함. 이는 데이터 집합의 의미보다는 연속적인 데이터의 흐름이라고 말하기 더 적합합니다.결론적으로 Stream을 이용하면 일련의 데이터 처리 연산을 함수형 연산을 통해 표준화된 방법으로 쉽게 가공하고 처리할 수 있습니다.Stream의 사용 이전에는 Collection으로 사용했었고 이는 코딩작업이 길어지며 가독성이 불편하여 작업할 때의 애로사항이 많았습니다.하지만 Stream은 기존의 Collection..

BackEnd/Java 2024.10.20

[Test] TDD - Test Driven Development

TDD란?TDD = TFD(Test First Development) + 리팩토링TDD란 프로그래밍 의사결정과 피드백 사이의 간극을 의식하고 이를 제어하는 기술이다. - 켄트벡, Test Driven Development by Example 중TDD의 아이러니 중 하나는 테스트 기술이 아니라는 점이다. TDD는 분석 기술이며, 설계 기술이기도 하다. - 켄트벡, Test Driven Development by Example 중TDD를 하는 이유디버깅 시간을 줄여준다.동작하는 문서 역할을 한다.변화에 대한 두려움을 줄여준다.TDD 사이클실패하는 테스트를 구현한다.테스트가 성공하도록 프로덕션 코드를 구현한다.프로덕션 코드와 테스트 코드를 리팩토링한다.TDD 원칙원칙 1 - 실패하는 단위 테스트를 작성할 때까..

BackEnd/Java 2024.10.04

[Java] synchronized - 동기화

한번의 하나의 스레드만 사용할 수 있게 만든다.둘 이상의 스레드가 공동의 자원을 공유하는 경우, 순서에 맞춰서 접근이 필요하고  스레드에 대한 동기화를 이용해서 하나의 자원에 접근하려 할 때, 주어진 순간에는 오직 하나의 스레드만 접근 가능하도록 하는 것모든 객체는 내부에 자신만의 lock을 가지고 있다.- 모니터 락 이라고 부른다- 객체 내부에 있어서 확인이 어렵다스레드가 synchronized 키워드가 있는 메서드에 진입 하려면 반드시 해당 인스턴스의 락이 있어야 한다. 이 상황을 실제 우리가 살아가는 상황에 대입해볼 수 있다.(저는 개인적으로 락 = 키 라고 생각하는것이 이해가 빨랐습니다.)만약 우리가 화장실에 들어가야 하는 상황이라고 가정한다. 화장실에 들어가려고 하는데, A가 이미 들어가서 사용..

BackEnd/Java 2024.08.19

[Java] 메모리 가시성 - volatile

main 스레드와 work 스레드가 존재 할 때, 맨 처음에 메모리에서 runFlag의 값을 가져오고 main 스레드와 work 스레드는 메인스레드의 runFlag값인 false를 가지고 있다. main -> falsework -> false 이 상태에서 메인 메모리에 접근하는 것이 아니라, main과 work는 runFlag의 값을 복사해서 스레드에서 캐시 메모리에 가지고 있게 된다. 캐시 메모리는 cpu와 매우 근접해있으며, 속도도 매우 빠른 메모리이기 때문에, 속도 측면에서 매우 유리하다. 하지만 비용이 비싼 메모리 이기 때문에, 큰 용량을 구성하기는 어렵다. 본론으로 돌아와서 main과 work의 캐시 메모리에 저장이 되어있고 이 상태를 main 스레드에서 변경하게 된다. runFlag를 true..

BackEnd/Java 2024.08.19

[Java] 프로세스와 스레드 - 1

프로세스와 스레드멀티태스킹과 멀티프로세싱만약 프로그램을 두개 이상 동시에 실행한다고 가정해보자. 연산을 처리할 수 있는 cpu 코어는 1개만 있다고 가정한다. 하나의 cpu 코어가 매우 빠르게 두개의 작업을 번갈아 가면서 처리하게 되면 사람은 이것이 같이 동시에 실행된다고 느끼게 된다. 이렇게 각 프로그램의 실행 시간을 분할해서 마치 동시에 실행되는 것 처럼 하는 기법을 시분할 기법이라고 한다. 그리고 이렇게 하나의 컴퓨터 시스템이 동시에 여러 작업을 수행하는 것을 멀티태스킹 이라고 한다. cpu에 어떤 프로그램이 얼마만큼 실행될지는 운영체제가 결정하는데 이것을 스케줄링 이라고 한다. 이때 단순히 시간으로만 작업을 분할하지는 않고, cpu를 최대한 활용할 수 있는 다양한 우선순위와 최적화기법을 사용한다...

BackEnd/Java 2024.08.05

[Java] 컬렉션 프레임워크 와 배열, 리스트

배열과 같이 여러 데이터(자료)를 구조화해서 다루는 것을 자료 구조라 한다.자바는 배열 뿐만 아니라, 컬렉션 프레임워크라는 이름으로 다양한 자료 구조를 제공한다. 배열배열에서 인덱스 사용하면 매우 빠르게 자료를 찾을 수 있다.데이터를 넣거나 뺄때 처음부터 찾는게 아니라 인덱스 번째의 주소 값을 정확하게 입력하여 찾아가면 바로 찾을 수 있고, 그렇기 때문에 인덱스를 이용하면 빠르게 찾을 수 있음배열을 찾는 공식은 다음과 같다배열의 시작 참조 + (자료의 크기 * 인덱스 위치)만약 arr이라는 배열의 3번째 값을 찾는다고 했을때 공식을 적용하면 다음과 같다.(배열은 0번째 부터 시작이기 때문에 3번째가 곧 2번째 인덱스)arr[2] = x100(참조주소 예시) + (4byte(int) * 2) = 108결론..

BackEnd/Java 2024.07.24

[Java] 예외 계층과 실무에서의 예외 처리 방법

언체크 예외는 체크 예외와 기본적으로 동일하다. 차이가 있다면 예외를 던지는 throws를 선언하지 않고 생략 할 수 있다. 생략한 경우 자동으로 예외를 던진다.RuntimeException을 상속받은 클래스는 언체크 예외가 된다.언체크 예외는 컴파일러가 체크 안하기 때문에 throws로 나열하지 않아도 됨.예외도 객체다. 필요한 필드와 메서드를 가질 수 있다.try catch finallytry -> 정상적인 흐름catch -> 예외 흐름finally -> 마무리 흐름finally 선언시 try catch블록의 흐름에 상관없이 finally 안의 로직은 반드시 실행하게 된다.try { client.connect(); client.send(data); } catch (NetworkCl..

BackEnd/Java 2024.07.17

[Java] Exception과 throw, throws, try catch 가 언제 사용 되는가

저는 이전에 예외를 처리할 때, 그저 컴파일러에서 추천해주는 해결법으로 alt enter 클릭으로 수정하는 것 밖에 안했습니다. 에러를 대응 하는 방법을 잘 몰랐는데 이번에 공부하면서 알게 되었기 때문에 포스팅 합니다.Exception자바의 예외 처리는 다음 키워드를 사용한다.try, catch, finally, throw, throwsObject -> Throwable -> ExceptionRuntimeException을 제외한 Exception을 상속한 예외는 모두 컴파일러가 체크한다RuntimeException은 언체크 예외, 애플리케이션 구동중 발생하는 에러알 수 없는 에러이기 때문에 좋지못하다.예측 불가능한 에러는 좋지못한 에러 -> Unchecked Exception예측 가능한 컴파일 단계에서..

BackEnd/Java 2024.07.16

[Java] 이것이 자바다 - 3장 연산자

오버플로우(overflow)와 언더플로우(underflow)오버플로우는 타입이 허용하는 최대 값을 벗어나는 것을 말한다. 반대로 언더플로우는 타입이 허용하는 최소값을 벗어나는 것을 말한다.정수 타입 연산에서 오버플로우 또는 언더ㅡㄹ로우가 발생되면 실행 에러가 발생할 것 같지만, 그렇지는 않고 해당 정수타입의 최소값 또는 최대값으로 되돌아간다.예를 들어, byte 타입의 최대값인 127에 1을더하면 오버플로우 -127에 1을 빼버리면 언더플로우다.정확한 계산은 정수연산으로산술 연산을 정확하게 계산하고 싶다면 실수 타입을 사용하지 않는 것이 좋다.정확한 연산을 원한다면 정수연산으로 변경해서 다음과 같이 계산하는 것이 좋다.나눗셈 연산의 오류처리나눗셈 또는 나머지 연산에서 좌측 피연산자가 정수이고 우측 피연산..

BackEnd/Java 2024.06.08