All
191 posts
[Ubuntu] 프로세스 메모리 사용량 확인 방법

Ubuntu(Devian Linux)에서 특정 프로세스의 메모리 사용량을 확인하는 다양한 방법을 알아보겠습니다. 메모리 사용량을 보여줄 때 RSS(Resident Set Size)로 표현되는데 RSS를 잘 모르신다면 아래 내용을 참고하세요. RSS는 프로세스가 실제로 물리 메모리(RAM)에 상주하는 메모리의 크기를 나타냅니다. RSS는 프로세스가 현재 사용하고 있는 물리적 메모리 양을 측정하며, 킬로바이트(KB) 단위로 표시됩니다. RSS에는 공유 메모리 영역도 포함될 수 있습니다. 여러 프로세스가 같은 물리적 메모리 페이지를 공유하는 경우, 각 프로세스의 RSS에 모두 중복으로 포함됩니다. RSS는 물리 메모리에 상주하는 메모리만 포함되며, 디스크에 스왑된 메모리는 포함되지 않습니다. 1. TOP 명령어를 이용한 방법 2. ps 명령어를 이용한 방법 3. /proc/[pid]/status 를 이용한 방법 4. pmap을 이용한 방법 1. TOP 명령어를 이용한 방법 top 명령어…

[Python] range 역순으로 for문 반복

함수를 사용하여 for문을 역순으로 반복하는 방법에 대해서 알아보겠습니다. 1. 일반적인 range()와 for문 2. range를 이용하여 역순으로 반복 3. “step=-2”로 역순 반복 4. 2중 for문과 range() 1. 일반적인 range()와 for문 는 start를 포함하고 end는 포함하지 않는 범위입니다. for문과 함께 사용되면 아래와 같이 index의 범위를 지정하여 반복할 수 있습니다. Output: 2. range를 이용하여 역순으로 반복 은 start에서 end까지 step 간격으로 숫자를 생성합니다. : 9에서 0까지 -1 간격으로 숫자 생성, 9 -> 8 -> 7 … -> 0의 숫자가 생성됩니다. Output: 3. “step=-2”로 역순 반복 step을 -2로 설정하면, 아래와 같이 9부터 -2간격으로 숫자를 생성하며 반복합니다. : 9에서 0까지 -2 간격으로 숫자 생성, 9 -> 7 -> 5 -> 3 -> 1 Output: 4. 2중 fo…

[Python] 파일 마지막 줄 읽기, 3가지 방법

텍스트 파일에서 마지막 라인만 읽는 방법에 대해서 알아보겠습니다. 1. readlines()를 이용한 방법 2. for문을 이용한 방법 3. readline()을 이용한 방법 1. readlines()를 이용한 방법 는 파일의 텍스트들을 라인으로 읽어서 리스트로 리턴합니다. 의 리턴 값이 있다면, 리스트의 마지막 Index 값을 읽으면 마지막 줄의 문자열을 얻을 수 있습니다. 의 리턴 값이 없다면, 비어있는 파일입니다. Output: 2. for문을 이용한 방법 처럼 파일에 대해서 for 루프를 돌리면, 라인 단위로 파일의 모든 내용을 순회합니다. 아래와 같이 for문으로 순회하면서 마지막 라인을 찾을 수 있습니다. Output: 3. readline()을 이용한 방법 는 파일에서 한 줄을 읽고 문자열을 리턴합니다. 아래와 같이 while문을 이용하여 파일 끝까지 읽으면서, 마지막 라인의 문자열을 찾을 수 있습니다. 의 리턴 값이 빈 값이면, 파일의 끝에 도달함을 의미하며, br…

[Python] 폴더 내 여러 JSON 파일 읽기

특정 디렉토리 아래의 JSON 파일을 모두 읽어서 딕셔너리에 저장하는 방법에 대해서 알아보겠습니다. 1. JSON 파일 읽기 2. 특정 폴더 하위의 모든 JSON 파일 읽기 1. JSON 파일 읽기 아래와 같이 JSON 파일을 읽을 수 있습니다. with로 파일을 열기 때문에, 명시적으로 파일을 닫을 필요가 없습니다. with 구문이 종료되면 자동으로 닫힙니다. : 파일 열기 : json_file 텍스트를 JSON 형식으로 읽고 딕셔너리 구조로 리턴 2. 특정 폴더 하위의 모든 JSON 파일 읽기 특정 폴더 하위의 모든 JSON 파일을 찾아서 읽고, JSON 데이터를 리스트에 저장합니다. 예제에서는 파싱한 모든 데이터를 마지막에 출력합니다. 디렉토리 하위의 모든 파일 탐색 : 파싱한 JSON 객체를 리스트에 저장 : 파싱한 모든 JSON 데이터 출력 Output:

[Python] 두 리스트 중복 제거, 3가지 방법

두 리스트가 갖고 있는 요소들 중에 중복 값을, 두 리스트에서 서로 제거하는 방법에 대해서 알아보겠습니다. 1. List comprehension을 이용한 방법 2. filter()를 이용한 방법 3. for문을 이용한 방법 1. List comprehension을 이용한 방법 리스트 컴프리헨션을 이용하여 두개의 리스트의 중복을 서로 찾아서 제거할 수 있습니다. for문을 이용하여 동일하게 구현할 수 있지만, 리스트 컴프리헨션을 사용하면 한 줄로 구현할 수 있습니다. : list1의 값 중에 list2에 없는 것만 리스트로 리턴 Output: 2. filter()를 이용한 방법 는 list의 요소들 중에 lambda 함수에 대해서 true인 것만 Iterator로 리턴됩니다. : list1의 요소들 중에 list2에 없는 것만 Iterator로 리턴 : Iterator로 참조되는 요소들을 리스트로 변환 Output: 3. for문을 이용한 방법 for문을 이용하여 직접 구현할…

[Python] 문자열 마지막 문자 제거, 3가지 방법

문자열의 마지막 문자를 제거하는 방법에 대해서 알아보겠습니다. 마지막 문자에 ”,“가 붙어있거나, 어떤 문자가 붙어있을 때 이것을 제거하고 싶을 때가 있는데요. 예제와 함께 제거 방법을 알아보겠습니다. 1. 리스트 슬라이싱을 이용한 방법 2. rstrip()을 이용한 방법 3. 정규표현식을 이용한 방법 1. 리스트 슬라이싱을 이용한 방법 는 문자열 text에서 Index 0부터 문자열 마지막 Index 바로 이전까지만 잘라서 문자열로 리턴합니다. 는 에서 마지막 문자를 제외한 나머지를 잘라서 리턴 Output: 2. rstrip()을 이용한 방법 는 str1이 str2로 끝나면, 문자열에서 str2를 제거합니다. 아래와 같이 문자열이 특정 문자로 끝날 때 제거하도록 하거나, 항상 마지막 문자를 제거하도록 구현할 수 있습니다. : text의 끝이 !로 끝나면 ! 제거 : 은 text의 마지막 문자열 리턴, 즉, 이 코드는 마지막 문자열을 제거 Output: 3. 정규표현식을 이용…

[Python] 리스트에서 공백, 줄바꿈 제거

문자열 리스트의 요소들 중에 공백(), 빈문자(), 줄바꿈() 문자들이 포함된 경우가 있는데, 이런 불필요한 문자열들을 제거하여 정리하는 방법에 대해서 알아보겠습니다. 1. isspace(), strip()을 이용한 방법 2. filter()를 이용한 방법 3. 정규표현식을 이용한 방법 1. isspace(), strip()을 이용한 방법 은 문자열에 공백이 있을 때 true를 리턴하며, 은 문자열의 앞/뒤의 공백을 제거합니다. 빈문자열, 공백 문자, 개행 문자에 대해서 은 다음과 같은 결과를 출력합니다. 이것을 이용하여 아래와 같이 리스트 컴프리헨션과 함께 공백 문자, 줄바꿈 문자를 제거할 수 있습니다. : 공백 문자, 개행문자를 필터링 : 공백 문자를 필터링 Output: 2. filter()를 이용한 방법 isspace(), strip()를 사용하는 것은 동일하지만, 리스트 컴프리헨션 대신에 함수를 사용하여 다음과 같이 구현할 수 있습니다. 모든 리스트 요소에 대해서 문…

[Python] print() 줄바꿈 제거

print() 함수에서 줄바꿈 문자를 제거하는 방법에 대해서 알아보겠습니다. 1. 줄바꿈 문자(개행 문자) 2. print()에서 줄바꿈 문자 제거 3. 문자열 중간에 있는 줄바꿈 문자 제거 1. 줄바꿈 문자(개행 문자) 줄바꿈 문자(개행문자)는 을 말하며, 텍스트의 한줄이 끝났음을 나타내는데 사용됩니다. 텍스트 파일을 열어보면, 보이지는 않지만 문서 끝에 줄바꿈 문자가 있습니다. 이 문자로, 줄이 바뀌었는지 인식하여 다른 줄로 텍스트를 보여줍니다. 2. print()에서 줄바꿈 문자 제거 print()는 기본적으로 문자열 끝에 을 붙여서 화면에 출력합니다. 그래서 기본적으로 줄이 바뀝니다. 만약 줄바꿈 문자를 제거하고 싶다면 두번째 인자로 를 전달하면 됩니다. end가 문자열 마지막에 추가할 문자를 변경합니다. 결과를 보면, 두번째 줄은 줄바꿈을 하지 않고 세번째 줄이 바로 출력됨 Output: 만약 줄바꿈 문자 대신에, 다른 문자를 넣고 싶다면 아래와 같이 추가할 수 있습니다.…

[Python] 문자열에서 숫자만 제거, 3가지 방법

문자열에서 숫자만 찾아서 제거하는 방법에 대해서 알아보겠습니다. 1. 정규표현식을 이용한 방법 2. 반복문을 이용한 방법 3. str.maketrans()를 이용한 방법 1. 정규표현식을 이용한 방법 re.sub(pattern, repl, text)는 text에서 pattern과 일치하는 문자열을 모두 찾고 repl로 변경합니다. 이것을 이용하여 아래와 같이 숫자만 찾는 패턴으로 숫자를 모두 찾고, 빈문자열로 변환하여 제거할 수 있습니다. 정규표현식 는 숫자 1개를 의미, 는 1개 이상의 문자를 의미 : text에서 1개 이상의 숫자들이 연속된 문자열을 찾고 로 변경 Output: 2. 반복문을 이용한 방법 아래와 같이, 문자열의 각 문자를 반복 순회하면서, 숫자가 아닌 문자만 모으고, 으로 합치면 숫자만 제거된 문자열을 만들 수 있습니다. : iterable의 요소들을 하나의 문자열로 연결하는데, 요소들 사이에 를 추가 Output: 3. str.maketrans()를 이용한…

[Python] 문자열 중간 공백 제거, 4가지 방법

문자열 중간에 있는 공백들을 제거하는 방법에 대해서 알아보겠습니다. 1. replace()를 이용한 방법 2. 정규표현식을 이용한 방법 3. split()을 이용한 방법 4. List comprehension을 이용한 방법 1. replace()를 이용한 방법 는 문자열에서 a를 b로 변경합니다. 이것을 이용하여 아래와 같이 공백 문자를 빈문자열로 변환하여 제거할 수 있습니다. 중간 공백 뿐만 아니라 앞, 뒤 공백도 제거됨 Output: 2. 정규표현식을 이용한 방법 는 string 문자열에서 pattern에 일치하는 모든 문자열을 repl로 변경합니다. 이것을 이용하여 아래와 같이 공백 문자를 빈문자열로 변환하여 제거할 수 있습니다. 중간 공백 뿐만 아니라 앞, 뒤 공백도 제거됨 패턴에서 는 공백을 의미, 는 앞의 패턴이 1개 이상 반복되는 패턴 Output: 3. split()을 이용한 방법 은 공백으로 문자열을 분리하고 리스트로 분리된 문자열들을 리턴합니다. 이 리스트를 으로…

[Python] 특수문자 제거, replace()와 정규식

replace()와 정규표현식 등을 이용하여 문자열에서 특수문자를 제거하는 방법에 대해서 알아보겠습니다. 1. 정규표현식으로 특수문자 제거 아래와 같이 정규표현식으로 특수문자 제거할 수 있습니다. : string에서 pattern에 일치하는 문자열을 repl로 변경 Output: 2. Output: 3. Output: 4. Output: 5. Output: 6. Output:

[Python] with로 파일 읽기/쓰기

with 키워드를 이용하여 파일을 읽고 쓰는 방법에 대해서 알아보겠습니다. 1. with를 사용하지 않고 파일 열기 2. with로 파일 열기 3. with로 파일 쓰기 4. with를 사용하여 append 모드로 파일 열기 1. with를 사용하지 않고 파일 열기 with를 사용하지 않고 파일을 열면, 파일을 모두 사용하고 로 파일을 닫아줘야 합니다. 만약 파일을 닫지 않으면 프로세스에 파일이 열린 상태로 되어있고, 이런 것이 누적되어 파일을 열 수 없는 상황이 발생할 수 있습니다. 2. with로 파일 열기 with를 사용하여 파일을 열면, with 구문이 종료될 때 저절로 파일이 닫힙니다. 따라서, 명시적으로 닫아줄 필요가 없어서 실수로 리소스 leak이 발생하는 일이 없게 됩니다. 아래와 같이 with를 사용하여 파일을 열 수 있습니다. : read 모드로 파일 열기 : 파일 내용 읽기 3. with로 파일 쓰기 with로 파일을 쓰려면, 아래와 같이 모드로 파일을 열…

[Python] 환경 변수 읽기 (os.environ)

파이썬에서 모든 시스템 환경 변수를 읽거나, 특정 환경변수를 가져오는 방법에 대해서 알아보겠습니다. 1. 모든 환경 변수 읽기 2. 특정 환경 변수 읽기 1. 모든 환경 변수 읽기 는 모든 환경 변수 정보를 갖고 있는 객체를 리턴하며, for문으로 key와 value를 순회할 수 있습니다. key는 환경 변수 이름, value는 값 아래와 같이 모든 환경 변수 값을 출력할 수 있습니다. Output: 2. 특정 환경 변수 읽기 아래와 같이 get 함수로 특정 환경 변수의 값을 읽을 수 있습니다. 대신에 찾으려는 환경 변수를 입력하면 됩니다. 찾으려는 환경 변수가 없는 경우, 기본값이 리턴됩니다. 실제 환경 변수를 사용하여 아래와 같이 호출하고 결과를 확인해볼 수 있습니다. Output: 기본값 미설정 처럼 기본 값을 사용하지 않을 수 있습니다. 대신, 찾으려는 환경 변수가 없는 경우 이 리턴됩니다.

[Python] 상위 폴더 파일 import 방법

파이썬에서 상위 폴더의 파일을 import하는 방법에 대해서 알아보겠습니다. 1. 동일 경로 파일 import 2. 상위 경로 파일 import 1. 동일 경로 파일 import 아래와 같이 동일 경로에 와 가 있다면, 에서는 아래와 같이 동일 경로의 파일을 import할 수 있습니다. 2. 상위 경로 파일 import 동일 경로가 아닌, 상위 경로의 파일을 import하려면 먼저 상위 경로의 path를 절대 경로에 추가해야 합니다. 그리고 파일을 import할 수 있습니다. 아래와 같이 의 상위 경로에 가 있을 때 에서 아래 코드처럼 을 import 할 수 있습니다. : 절대경로 path에 상위 경로 path 추가 : 작업 디렉토리의 상위 경로 리턴 : new_module 파일 import 또는 상위 디렉토리의 절대 경로를 직접 입력하고 import 할 수 있습니다.

[Python] 한번에 여러개 입력 받기

input 함수를 이용하여, 한번에 여러 데이터를 입력 받는 방법에 대해서 알아보겠습니다. 1. 숫자 여러개를 공백으로 구분하여 입력 받기 2. 여러 줄에 걸쳐 입력 받기 3. 문자열 여러개를 쉼표로 구분하여 입력 받기 1. 숫자 여러개를 공백으로 구분하여 입력 받기 입력하는 숫자 간에 공백으로 구분하여 여러 값을 입력할 수 있습니다. : 한번에 여러 값을 입력받고 공백으로 문자열 분리 : 문자열로 된 숫자를 int로 변환하고 다시 리스트에 저장 Output: 만약 숫자가 아닌 문자열을 받는다면, 문자열을 int로 변환하는 부분만 제외하고 아래와 같이 구현하시면 됩니다. Output: 2. 여러 줄에 걸쳐 입력 받기 한줄에 여러 값을 전달하는 것이 아니고, 한줄에 하나의 데이터만 전달하고 대신 여러 줄에 걸쳐 여러 데이터를 전달하는 방식입니다. 아래와 같이 반복문으로 을 여러번 호출하여 여러 데이터를 받습니다. 그리고 마지막에 라는 키워드를 입력했을 때 반복문을 탈출하여 입력받…

[Python] for문 리스트 출력, 3가지 방법

for문 등, 반복문으로 리스트의 모든 요소를 탐색, 출력하는 방법에 대해서 알아보겠습니다. 1. for문으로 리스트 출력 2. for문과 range로 리스트 출력 (index, value) 3. for문과 enumerate()로 리스트 출력 (index, value) 4. while문으로 리스트 출력 1. for문으로 리스트 출력 기본적으로 for문으로 사용하여 아래와 같이 리스트의 모든 요소를 순회하고 값을 출력할 수 있습니다. Output: 2. for문과 range로 리스트 출력 (index, value) for문과 range를 사용하면 값과 함께 index도 출력할 수 있습니다. : 0에서 n-1의 범위 : 순회하면서 i에 0부터 (length - 1)까이 입력됨 Output: 3. for문과 enumerate()로 리스트 출력 (index, value) enumerate를 이용하면 조금 더 보기 좋게 for문으로 리스트를 순회할 수 있습니다. : 리스트의 요소를 순…

[Python] json.dump() 한글 깨지지 않도록 저장

으로 딕셔너리를 JSON 파일로 저장하고 파일을 열면, 한글이 이상하게 보입니다. 에디터에서 파일을 열 때도 한글로 보이도록 저장하는 방법에 대해서 알아보겠습니다. 1. 잘못된 포맷으로 한글이 저장되는 경우 2. 한글을 유니코드로 저장 3. 유니코드로 저장된 JSON 파일 읽기 1. 잘못된 포맷으로 한글이 저장되는 경우 아래와 같이 딕셔너리를 JSON 형식의 파일로 변환하여 저장할 수 있습니다. 하지만 저장된 파일을 보면 한글 그대로 표현되지 않고 이상한 문자들로 보입니다. : dict를 JSON으로 변환하여 file에 저장 저장된 파일을 열어보면 아래와 같이 보입니다. 위의 코드는 한글을 유니코드가 아닌 아스키로 저장되어 이렇게 보임 유니코드 형식으로 저장해야 에디터에서 한글로 보임 2. 한글을 유니코드로 저장 로 JSON 파일을 저장할 때 인자로 값을 false로 전달하면, 한글이 유니코드 문자 그대로 저장됩니다. 이 때문에 에디터로 저장된 파일을 열면 한글로 보이게 됩니…

[Python] 리스트 순서 바꾸기, 3가지 방법

리스트의 순서를 반대로 바꾸는, 거꾸로 뒤집는 방법에 대해서 알아보겠습니다. 1. reverse()를 이용한 방법 2. 리스트 슬라이싱을 이용한 방법 3. reversed()를 이용한 방법 1. reverse()를 이용한 방법 는 리스트의 순서를 반대로 변경합니다. Output: 2. 리스트 슬라이싱을 이용한 방법 리스트 슬라이싱을 이용하여, 역순으로 리스트의 순서를 바꿀 수 있습니다. : 뒤에서 시작 방향으로 -1 간격으로 요소를 뽑아서 리스트로 리턴, 즉, 순서가 역순으로 변경된 리스트가 리턴됨 Output: 3. reversed()를 이용한 방법 는 list의 역순으로 참조하는 iterator를 리턴합니다. 로 이터레이터의 요소들을 리스트로 변환할 수 있습니다. : reversed_iterator의 요소를 리스트로 변환하여 리턴 Output:

[Python] 월 마지막 날짜 찾기, 2가지 방법

특정 년도와 특정 달의 마지막 날짜를 계산하는 방법에 대해서 알아보겠습니다. 1. calendar를 이용한 방법 는 특정 년도, 월의 정보를 Tuple로 리턴합니다. : 월의 시작 날짜 : 월의 마지막 날짜 아래와 같이 calendar를 사용하여 특정 년도, 월의 마지막 날짜를 찾을 수 있습니다. Output: 2. datetime을 이용한 방법 만약 9월의 마지막 날짜를 찾고 싶을 때, 10월에서 하루를 빼면, 그 날짜가 마지막 날짜가 됩니다. 이런 방법을 활용하여, 아래 예제와 같이 datetime으로 특정 월의 마지막 날짜를 찾을 수 있습니다. : year년 month월 1일에 대한 datetime 객체 생성 : 한달을 더함 : 원하는 월의 다음 월 첫번째 날짜에 대한 datetime 객체 : next_month에서 하루를 빼고, 그 날짜를 리턴, 즉, 원하는 월의 마지막 날짜가 리턴됨 Output: 3. 특정 월의 첫번째 날짜 찾기 첫번째 날짜는 항상 1이기 때문…

[Python] 리스트 랜덤 섞기, 3가지 방법

리스트가 갖고 있는 요소들의 순서를 랜덤으로 섞는 방법에 대해서 알아보겠습니다. 리스트의 요소들을 무작위로 뽑거나, 어떤 동작을 무작위로 동작하게 만드려고 리스트의 순서를 랜덤으로 변경하고 싶을 때가 있습니다. 1. random.shuffle()을 이용한 방법 2. random.sample()을 이용한 방법 3. random.choice()를 이용한 방법 1. random.shuffle()을 이용한 방법 는 list의 순서를 랜덤으로 섞습니다. 아래와 같이 구현할 수 있습니다. Output: 2. random.sample()을 이용한 방법 은 list가 갖고 있는 요소들 중에서 num 개수만큼 무작위로 요소 값을 뽑고 값들을 리스트에 저장하여 리턴합니다. : my_list의 개수만큼 무작위로 뽑고 리스트로 반환, 즉, my_list의 순서가 랜덤으로 변경된 리스트가 새로운 만들어짐 의 순서는 변경되지 않음 Output: 3. random.choice()를 이용한 방법 는 list…

[Python] 리스트 거꾸로 출력, 3가지 방법

리스트의 순서를 뒤집어서, 거꾸로 출력하는 방법에 대해서 알아보겠습니다. 1. reverse()를 이용한 방법 2. reversed()를 이용한 방법 3. 리스트 슬라이싱을 이용한 방법 1. reverse()를 이용한 방법 는 리스트의 순서를 반대로 뒤집습니다. 원본 리스트의 순서를 변경하기 때문에, 원본 리스트 값이 변경됨 Output: 2. reversed()를 이용한 방법 는 list의 순서를 거꾸로 뒤집고, 그 값들을 참조하는 iterator 객체를 리턴합니다. 로 이터레이터를 리스트로 변환할 수 있음 순서가 뒤집힌 리스트 객체를 새로 만드는 것이기 때문에, 원본 리스트는 변경되지 않음 Output: 3. 리스트 슬라이싱을 이용한 방법 는 my_list의 끝에서 시작 index까지 -1씩 감소하면서 거치는 값들을 리스트로 리턴합니다. 즉, 역순으로 변경된 리스트가 리턴됩니다. 역순의 리스트를 새로 만드는 것이기 때문에, 원본 리스트가 변경되지 않음 처럼 일정 규칙으로 리스…

[Java] Stream.concat(), 스트림 합치기

Java 스트림(Stream)에서 은 두 개의 스트림 a와 b를 연결하여 새로운 스트림을 리턴합니다. 리턴된 새로운 스트림은 스트림 a와 b가 갖고 있는 모든 요소들을 발생시킵니다. Stream.concat() 예제1. 두개의 스트림을 하나의 Stream으로 연결 예제 2. 3개의 Stream을 하나의 Stream으로 연결 예제 3. Stream을 합치면서 중복 요소는 제거 예제 4. 병렬 Stream을 concat()으로 합치기 Stream.concat() 아래와 같이 두개의 Stream a와 b를 인자로 받습니다. 리턴 값은 a와 b가 합쳐진 새로운 Stream을 리턴합니다. 예제1. 두개의 스트림을 하나의 Stream으로 연결 아래 예제는 과 를 연결하여 새로운 스트림을 리턴합니다. 합쳐진 의 요소들을 출력해보면 두개의 스트림의 모든 요소들이 출력되는 것을 볼 수 있습니다. Output: 예제 2. 3개의 Stream을 하나의 Stream으로 연결 2개 보다 많은 Stream…

[Java] Stream Optional 개념/예제

Optional은 Java Stream과 함께 도입된 컨셉이며, 어떤 이유로 사용하는지 개념과 예제를 소개합니다. Stream Optional Optional 객체 생성 Optional.isPresent() : non-null 값을 갖고 있는지 확인 Optional.orElse() : null 객체에 대한 기본 값 Optional.orElseGet() : 함수 결과를 기본값으로 Optional.orElseThrow() : 기본 값 대신에 Exception 발생 Stream Optional Optional은 어떤 객체를 보관하는 컨테이너 클래스이며, null 체크 같은 간단한 기능을 제공합니다. Optional 객체는 non-null(null이 아닌) 객체이지만, 대신 어떤 값을 갖고 있는데 그 값이 null일 수 있고, 또는 null이 아닐 수 있습니다. 기존엔 객체에 대한 null check 코드를 직접 구현하고 예외처리를 했다면, Optional은 이런 기본적인 기능과 예외처리…

[Java] 스레드 setPriority() 우선순위 설정

Java 스레드의 우선순위(Priority)에 대해서 설명하고, 함수를 이용하여 우선순위를 변경하는 방법에 대해서 알아보겠습니다. 1. Thread 우선순위(Priority) 2. Thread 우선순위 확인 3. Thread 우선순위 변경 1. Thread 우선순위(Priority) 스레드 우선순위(Thread Priority)는 스레드 스케줄링에 사용되는 개념입니다. 스레드 스케줄링은 여러 스레드가 동시에 실행될 때 어떤 스레드가 얼마나 자주 실행되는지 결정하는 것인데요, 스레드 우선순위가 높으면 스레드 스케줄링 알고리즘에 의해 다른 스레드보다 자주 실행됩니다. 반대로 우선순위가 낮으면, 다른 스레드보다 적게 실행됩니다. Thread의 우선순위의 범위는 1부터 10이며, 숫자가 높으면 우선순위가 높아서 더 자주 스케줄링이 됩니다. Thread 클래스는 기본적으로 Min, Normal, Max Priority 값에 대한 상수를 제공합니다. Thread.MIN_PRIORITY = …

[Java] Try with resources로 여러 파일 열기/닫기

Try with resources는 파일을 사용하고 자원을 해제할 때, 명시적으로 해제하지 않아도 자동으로 해제해줍니다. 이 방식은 파일을 읽을 때 자원 해제 코드를 따로 구현해줄 필요가 없어서 자주 사용하고 있습니다. 이 글에서 구문을 사용하는 이유와, 여러 파일을 동시에 사용하는 방법에 대해서 알아보겠습니다. 1. try-with-resources가 없을 때 발생하는 일 만약 를 사용하지 않으면, 아래 예제처럼 구분을 사용하여 파일을 열고 닫아야 합니다. BufferedReader로 파일 열었으면, 꼭 닫아줘야 함 일반적으로 try에서 파일을 열면 finally 구문에서 를 호출하여 파일을 닫음 파일을 닫을 때 try-catch로 IOException의 예외 처리를 추가해야해서 코드가 길어짐, 또한 실수로 파일 닫는 것을 잊어먹을 수 있음 2. try-with-resources로 파일 1개 열기 다음과 같이 를 사용하여 위의 예제를 다시 구현해보았습니다. 의 구문이 끝날 때…

[Java] 현재 프로젝트 경로 가져오는 방법

현재 프로젝트의 파일 경로, 즉, 작업 디렉토리(Working directory)의 패스를 코드로 가져오는 방법에 대해서 알아보겠습니다. 1. System 프로퍼티를 이용한 방법 2. File을 이용한 방법 3. Paths를 이용한 방법 1. System 프로퍼티를 이용한 방법 시스템 프로퍼티는 현재 작업 경로가 저장되어있습니다. 아래와 같이 시스템 프로퍼티를 통해 작업 디렉토리를 가져올 수 있습니다. Output: 2. File을 이용한 방법 처럼, 현재 디렉토리에 대한 파일을 상대 경로로 생성할 수 있습니다. 생성된 파일의 경로가 현재 작업 디렉토리 경로와 같습니다. Output: 3. Paths를 이용한 방법 File과 같은 방식으로, 현재 경로에 대한 Path를 생성하고 그 패스를 가져오면 작업 디렉토리를 구할 수 있습니다. Output:

[Java] JSON 파일 생성, 저장 방법

Java에서 라이브러리를 사용하여 JSON 형식의 파일을 생성, 저장하는 방법에 대해서 알아보겠습니다. 1. org.json 라이브러리 2. key-value 구조의 JSON 생성 및 파일 저장 3. 배열을 갖고 있는 JSON 생성 및 파일 저장 4. 좀 더 복잡한 JSON 생성 및 파일 저장 1. org.json 라이브러리 이 글에서는 라이브러리를 사용하여 JSON 데이터 생성 및 파일을 저장합니다. 예제를 소개하기 전에, Maven 또는 Gradle 프로젝트에서 라이브러리를 사용하려면 아래 내용을 참조하여 설정하시면 됩니다. 라이브러리 설정 (Maven 프로젝트) 라이브러리 설정 (Gradle 프로젝트) 2. key-value 구조의 JSON 생성 및 파일 저장 가장 간단한 값들을 갖고 있는 JSON 파일을 생성하는 예제입니다. 에 함수로 key-value 값들을 추가 으로 데이터를 JSON 형식의 문자열로 변환 FileWriter를 통해 JSON 문자열을 파일로 저장…

[Python] 파일에서 특정 단어 개수 세기

텍스트 파일에서 특정 단어가 몇개 있는지 개수를 세는 방법에 대해서 알아보겠습니다. 1. read()를 이용한 방법 2. readlines()를 이용한 방법 3. 정규표현식을 이용한 방법 1. read()를 이용한 방법 예제에서 사용하는 파일은 아래와 같습니다. 는 파일의 모든 텍스트를 읽어서 문자열로 리턴합니다. 아래와 같이 count 함수를 사용하여 특정 문자열 개수를 셀 수 있습니다. : 파일의 모든 내용을 문자열로 리턴 : string에서 word 개수 리턴 Output: 2. readlines()를 이용한 방법 는 파일의 텍스트를 라인 단위로 읽어서 리스트로 리턴합니다. 리스트를 순회하면서 특정 단어를 찾아 개수를 셀 수 있습니다. : 파일의 텍스트를 라인 단위로 리스트로 리턴 : 문자열에서 특정 단어 개수 세기 Output: 3. 정규표현식을 이용한 방법 로 파일의 모든 내용을 문자열로 가져오고, 문자열에서 정규표현식으로 특정 문자열 개수를 셀 수 있습니다. …

[Python] 오늘 날짜 yyyymmdd 형식 가져오기

오늘 날짜를 yyyymmdd 형식으로 가져오는 방법에 대해서 알아보겠습니다. 1. strftime()을 이용한 방법 2. f-string을 이용한 방법 3. 날짜 포맷 변경하기 1. strftime()을 이용한 방법 위 코드에서 함수를 사용하여 현재 날짜를 가져옵니다. 그런 다음 strftime() 메서드를 사용하여 날짜를 원하는 형식으로 포맷합니다. 포맷 문자열 을 나타냅니다. : 오늘 날짜, 시간 가져옴 : “yyyymmdd” 형식으로 문자열 변환 : 연도(4자리), 월(2자리), 일(2자리) 의미 Output: 2. f-string을 이용한 방법 f-string을 이용하여 아래와 같이 날짜를 문자열 포맷으로 변환할 수 있습니다. : “yyyymmdd” 형식으로 날짜를 문자열로 변환 : 연도(4자리), 월(2자리), 일(2자리) 의미 Output: 3. 날짜 포맷 변경하기 포맷은 유지하는데, 중간에 를 넣거나 다른 단어를 넣고 싶을 때, 포맷을 아래와 같이 살짝 …

[Python] 현재 파일, 디렉토리 위치 확인

현재 파이썬 파일, 디렉토리의 경로를 찾는 방법에 대해서 알아보겠습니다. 1. 현재 파일 경로 2. 현재 작업 디렉토리(Working directory) 3. 작업 디렉토리 변경 1. 현재 파일 경로 아래와 같이 현재 파일의 경로를 가져올 수 있습니다. : 파일 경로 : 파일의 절대 경로 Output: 2. 현재 작업 디렉토리(Working directory) 작업 디렉토리는 코드에서 파일을 찾거나 할 때, 상대 경로로 설정된 디렉토리를 말합니다. : 현재 작업 디렉토리 Output: 3. 작업 디렉토리 변경 는 작업 디렉토리를 로 변경합니다. Output:

[Python] 딕셔너리 내림차순 정렬

딕셔너리를 내림차순으로 정렬하는 방법에 대해서 알아보겠습니다. 1. key를 내림차순으로 정렬 2. value를 내림차순으로 정렬 3. 커스텀 객체를 갖고 있는 딕셔너리 내림차순 정렬 1. key를 내림차순으로 정렬 아래 코드는 딕셔너리 의 key를 내림차순으로 정렬합니다. sorted 함수는 아래와 같은 인자를 받아서 딕셔너리를 정렬합니다. 여기서 key 인자는, 딕셔너리의 key-value 값 중에 어떤 것을 사용하여 정렬할 것인지 의미하는 것으로, 은 key를 의미하고, 은 value를 의미합니다. 는 item을 key를 오름차순으로 정렬 는 item을 key를 내림차순으로 정렬 람다식 는 딕셔너리의 key 값을 사용하여 정렬하라는 의미 Output: 2. value를 내림차순으로 정렬 다음은 value를 내림차순으로 정렬하는 예제입니다. 로 내림차순 정렬 람다식 는 딕셔너리의 value 값을 사용하여 정렬하라는 의미 Output: 3. 커스텀 객체를 갖고 있는 딕셔너리 내림…

[Python] 하위 폴더 파일 개수 확인, 3가지 방법

하위 디렉토리의 모든 파일 개수를 세는 방법에 대해서 알아보겠습니다. 1. os.walk()를 이용한 방법 2. glob()을 이용한 방법 3. os.listdir()을 이용한 방법 1. os.walk()를 이용한 방법 는 dir 디렉토리 하위의 모든 파일 및 폴더를 순회하면서 파일 이름 등의 정보를 전달합니다. : 특정 디렉토리 아래의 파일들이 리스트로 전달됨, 리스트의 개수를 더하여 전체 파일 개수를 셈 Output: 2. glob()을 이용한 방법 은 인자로 전달된 경로의 하위 파일 리스트를 리턴합니다. 리스트의 개수를 세서 파일 개수를 확인할 수 있습니다. glob에서 는 하위 디렉토리 및 파일의 경로를 가져와서 리스트로 리턴 으로 시작하는 숨겨진 파일들은 가져오지 않음 Output: 디렉토리가 아닌, 파일 개수만 세기 glob은 디렉토리와 파일의 전체 경로를 리스트로 리턴하기 때문에, 아래와 같이 로 파일만 분류하여 개수를 셀 수 있습니다. 3. os.listdir()…

[Python] 문자열 위치 모두 찾기

문자열에서 특정 문자열이 있는 위치(Index)를 하나가 아닌, 문자열에 있는 모든 위치를 찾는 방법을 알아보겠습니다. 1. find()를 이용한 방법 2. 정규표현식을 이용한 방법 3. index()를 이용한 방법 1. find()를 이용한 방법 은 text라는 문자열에서 substring이라는 문자열의 위치를 왼쪽부터 찾고, 가장 먼저 찾은 문자열의 Index를 리턴합니다. 찾는 문자열이 없으면 는 -1 리턴 아래 예제에서 가장 먼저 찾은 “Python” 문자열은 Index 0의 “Python”이기 때문에 는 0 리턴 Output: 모든 문자열의 위치 찾기 위의 예제는 찾는 문자열이 여러개 있어도 하나의 위치만 리턴합니다. 문자열이 있는 모든 위치를 찾으려면 반복문을 사용하여 반복적으로 찾도록 구현해야 합니다. 는 text에서 substring 문자열을 start 인덱스부터 찾습니다. 아래와 같이 while문으로 반복적으로 모든 문자열의 위치를 찾을 수 있음 문자열을 찾았다면,…

[Python] 년, 월, 일 받아서 요일 출력

특정 년도, 월, 일 정보를 받아서, 해당 날짜에 대한 요일을 찾는 방법에 대해서 알아보겠습니다. 1. datetime과 strftime()를 이용한 방법 2. 요일을 영어가 아닌 한글로 출력 1. datetime과 strftime()를 이용한 방법 아래와 같이 년, 월, 일을 입력 받고, 그 날짜에 해당하는 요일을 가져올 수 있습니다. : 입력 받은 날짜에 대한 datetime 객체 생성 : 는 날짜에 대한 요일을 문자열로 생성하여 리턴 Output: 만약 사용자로부터 년, 월, 일을 입력받고 싶다면 아래와 같이 input을 사용할 수 있습니다. 2. 요일을 영어가 아닌 한글로 출력 은 요일을 영어로 출력하였는데, 만약 한글로 출력하고 싶다면 요일 정보를 받아서, 한글로 요일이 정의된 리스트를 만들어서 매핑을 해야 합니다. 는 요일 정보를 0~6의 값으로 리턴(0은 월요일 6은 일요일) 처럼 요일 값 0에서 6에 해당하는 한글 요일 이름 정의 로 요일 값을 한글 이름으로 변…

[Python] 딕셔너리 value로 key 찾기

딕셔너리는 key-value 데이터를 저장하는데, value 값으로 key 값을 찾는 방법에 대해서 알아보겠습니다. 딕셔너리는 처럼, key 값으로 value를 쉽게 찾을 수 있지만, value로 key를 찾는 함수는 제공하지 않습니다. 이 때문에, 직접 구현해줘야 합니다. 1. for문을 이용한 방법 2. filter()를 이용한 방법 3. 리스트 컴프리헨션을 이용한 방법 1. for문을 이용한 방법 아래와 같이 for문으로 딕셔너리를 탐색하면서, 특정 value 값을 갖고 있는 아이템을 찾고, 그 아이템의 key를 찾을 수 있습니다. 딕셔너리에서 key는 중복 값이 없지만, value는 중복 값이 있을 수 있어, 특정 value에 대한 key가 1개 이상이 될 수 있음 : 딕셔너리를 key, value로 순회 : 특정 value를 갖고 있는 key를 리스트에 저장 Output: 2. filter()를 이용한 방법 는 key-value 쌍을 갖고 있는 items에 대해서 l…

[Python] 어떤 날짜가 몇주차 인지 확인

특정 날짜가 몇주차인지 계산하는 방법에 대해서 알아보겠습니다. 1. 특정 날짜가 몇주차인지 확인 2. 사용자로부터 날짜 입력받아서 몇주차인지 확인 3. 오늘 날짜가 몇주차인지 확인 1. 특정 날짜가 몇주차인지 확인 은 날짜 정보를 특정 포맷으로 변경해주는데, 는 날짜에 대한 몇주차 정보를 문자열로 리턴합니다. 이것을 이용하여 다음과 같이 특정 날짜가 몇주차인지 계산할 수 있습니다. : 날짜가 속한 주차 정보를 문자열로 리턴 Output: 2. 사용자로부터 날짜 입력받아서 몇주차인지 확인 사용자로부터 직접 날짜를 입력받으려면 다음과 같이 함수를 사용하여 구현할 수 있습니다. 날짜를 입력받아 주차를 계산하는 방법은 위와 동일합니다. Output: 3. 오늘 날짜가 몇주차인지 확인 오늘 날짜가 몇주차인지 확인하려면, 함수로 현재 시간에 대한 datetime 객체를 생성해야 합니다. 그리고, 생성된 datetime에서 몇주차인지 찾는 방법은 위와 동일합니다. Output:

[Python] 모든 공휴일 날짜 가져오기

holidays 라이브러리를 사용하여 특정 년도의 공휴일 날짜를 가져오는 방법에 대해서 알아보겠습니다. holidays 라이브러리는 아래와 같이 pip로 설치할 수 있습니다. 1. 한국의 공휴일 날짜 가져오기 2. 다른 나라의 공휴일 날짜 가져오기 1. 한국의 공휴일 날짜 가져오기 아래 예제는 한국의 2023년의 모든 공휴일 날짜와 이름을 출력하는 예제입니다. : 한국의 2023년 공휴일 정보를 가져옴, 2023년 대신에 확인하고 싶은 년도를 인자로 입력하면 됨 : 모든 date와 name 정보를 리턴 Output: 2. 다른 나라의 공휴일 날짜 가져오기 일본 공휴일 Output: 미국 공휴일 Output:

[Java] 문자열 첫번째 문자 제거

문자열에서 첫글자, 첫번째 문자를 제거하는 방법에 대해서 알아보겠습니다. 1. substring()을 이용한 방법 2. StringBuilder를 이용한 방법 1. substring()을 이용한 방법 는 문자열에서 index부터 마지막까지 잘라서 리턴합니다. 즉, 첫번째 글자(index 0)만 제거된 문자열이 리턴됩니다. : 첫글자를 제거한 문자열을 다시 input 변수에 할당 Output: 2. StringBuilder를 이용한 방법 는 StringBuilder가 갖고 있는 문자열에서 index 문자를 제거합니다. : 첫글자(index 0) 제거 : StringBuilder가 갖고 있는 문자열을 String 객체로 리턴 Output:

[Java] 문자열 마지막 문자 제거

문자열에서 마지막 문자를 제거하는 방법에 대해서 알아보겠습니다. 1. String.substring()을 이용한 방법 2. StringBuilder.deleteCharAt()를 이용한 방법 1. String.substring()을 이용한 방법 는 문자열에서 index1부터 index2까지의 문자열을 잘라서 리턴합니다. 즉, 마지막 글자(length - 1)만 제거된 문자열이 리턴됩니다. : 마지막 문자가 제거된 문자열을 다시 input 변수에 할당 Output: 2. StringBuilder.deleteCharAt()를 이용한 방법 는 StringBuilder가 갖고 있는 문자열에서 index 문자를 제거합니다. : 마지막 글자(length - 1) 제거 : StringBuilder가 갖고 있는 문자열을 String 객체로 리턴 Output:

[Java] 문자열 왼쪽 0 제거, 3가지 방법

처럼 왼쪽이 0으로 채워진 문자열이 있을 때, 이 문자열을 제거하는 방법을 알아보겠습니다. 1. Integer.parseInt()를 이용한 방법 2. 정규표현식을 이용한 방법 3. substring()을 이용한 방법 1. Integer.parseInt()를 이용한 방법 문자열이 숫자로만 되어있다면 로 str을 int 타입으로 변환할 수 있습니다. int로 변환되면 왼쪽 0은 모두 제거되며, int를 다시 String으로 변환하면 왼쪽 0이 제거된 문자열을 얻을 수 있습니다. : int를 String으로 변환 Output: 2. 정규표현식을 이용한 방법 정규표현식으로 왼쪽에 있는 연속적인 0을 찾아서 제거할 수 있습니다. : 0으로 시작하는 연속적인 0 패턴 찾고, ""으로 변환하여 제거 replaceFirst는 문자열에 일치하는 패턴이 여러개라도 1개의 패턴만 다른 문자열로 변환함 패턴에서 는 문자열 시작을 의미, 는 앞의 패턴이 1개 이상 Output: 3. substrin…

[Java] 배열 크기 변경, 3가지 방법

배열의 크기(길이)를 동적으로 늘리는 방법에 대해서 알아보겠습니다. 사실 Java에서 배열의 크기를 늘리는 것은 기본적으로 불가능합니다. 배열의 크기는 생성 시 고정되기 때문입니다. 이런 이유로, 배열 크기를 변경하려면 새로운 배열을 생성하고, 기존 배열의 데이터를 복사해야 합니다. 1. Arrays.copyOf()를 이용한 방법 2. List를 이용한 방법 3. for문을 이용한 방법 1. Arrays.copyOf()를 이용한 방법 는 newSize 크기의 배열을 생성하고, array의 요소들을 새로운 배열에 복사합니다. 원본 배열의 크기보다 새로운 배열의 크기가 크면, 빈 공간은 0 또는 null로 채워집니다. 원본 배열의 크기보다 새로운 배열의 크기가 작으면, 새로운 배열의 길이만큼만 복사합니다. 아래와 같이 기본 배열보다 크기가 증가한, 또는 감소한 새로운 배열을 만들 수 있습니다. Output: 2. List를 이용한 방법 List는 동적으로 크기 증가, 감소가 가능한 자…

[Java] 문자열 마지막 콤마 제거

문자열의 마지막 문자가 콤마(”,“)인 경우, 이 문자를 제거하는 방법에 대해서 알아보겠습니다. 1. String.substring()을 이용한 방법 는 문자열에서 Index start에서 (end - 1)까지 범위의 문자열을 잘라서 리턴합니다. 다음과 같이 마지막 콤마 문자를 제거할 수 있습니다. : input 문자열의 마지막이 문자로 끝나면 true 리턴 : Index 0에서 Index (length -1) 이전 문자까지만 잘라서 리턴, 즉, 마지막 문자만 제거 Output: 2. StringBuilder.deleteCharAt()을 이용한 방법 는 StringBuilder가 갖고 있는 문자열에서 index의 문자를 제거합니다. : 문자열 마지막 Index(length - 1) 문자 제거 아래와 같이 마지막 문자열을 제거할 수 있습니다. Output: 3. 정규표현식을 이용한 방법 정규표현식을 이용하여 문자열의 마지막 문자가 인 경우를 찾을 수 있습니다. 그리고 을 이용…

[Java] 배열 역순(거꾸로) 변환 및 출력

배열의 요소 값 위치를 역순으로 변환하는 방법에 대해서 알아보겠습니다. 1. Collections.reverse()를 이용한 방법 2. for문을 이용한 방법 1. Collections.reverse()를 이용한 방법 는 list에 저장된 요소들의 순서를 반대로 변경합니다. 이것을 이용하여 다음과 같이 배열의 순서를 뒤집을 수 있습니다. : 배열을 리스트로 변환 : 리스트의 순서 뒤집기 : 리스트를 배열로 변환 Output: 2. for문을 이용한 방법 for문을 이용하여 아래와 같이 배열의 순서를 거꾸로 뒤집을 수 있습니다. 원본 배열의 마지막에서 앞으로 순회하면서, 다른 배열의 Index 0부터 끝까지 복사합니다. 이렇게 하면 역순으로 변환된 배열을 생성할 수 있습니다. Output:

[Java] 소수점 둘째자리까지 반올림, 4가지 방법

float 또는 double을 소수점 둘째자리까지 반올림하는 방법에 대해서 알아보겠습니다. 이것을 응용하여 소수점 n자리까지 반올림하도록 구현할 수 있습니다. 1. String.format()을 이용한 방법 2. Math.round()를 이용한 방법 3. DecimalFormat을 이용한 방법 4. BigDecimal을 이용한 방법 1. String.format()을 이용한 방법 처럼 숫자 number를 소수점 2자리까지 표시할 수 있습니다. 는 소수점 n자리까지 표시하며, n+1 자리에서 반올림 Output: 2. Math.round()를 이용한 방법 는 숫자 n을 반올림하여 정수로 만듭니다. 소수점 3자리 이상 있는 실수를 2자리까지 반올림하려면, 숫자에 100을 곱하고 로 반올림하고 다시 100으로 나누면 됩니다. 예를 들어, 이고, 이 됩니다. 다시 100으로 나누면 이 됩니다. Output: 3. DecimalFormat을 이용한 방법 : 소수 2자리까지 반올림하는 포…

[Java] 일정 시간 지난 후 코드 실행

일정 시간이 지난 후, 특정 코드를 실행시키는 방법에 대해서 알아보겠습니다. 1. Timer를 이용한 방법 2. Executors를 이용한 방법 1. Timer를 이용한 방법 특정 시간 후, 한번 실행 는 delay 시간 후에 TimerTask의 함수를 실행시킵니다. TimerTask는 람다식으로 전달할 수 있음 delay의 시간 단위는 ms 아래 예제는 5초 뒤에 함수가 실행됩니다. Output: 특정 주기로 반복 실행 는 delay 뒤에 TimerTask의 함수가 실행되며, 그 이후에 period 시간 주기로 반복 실행됩니다. 아래 예제는 5초 후에 처음 함수가 호출되며, 그 이후에 10초 간격마다 함수가 주기적으로 호출됩니다. Output: 2. Executors를 이용한 방법 특정 시간 후, 한번 실행 ScheduledExecutorService를 이용하여 특정 시간 후에 코드를 실행시킬 수 있습니다. 은 delay 후에 Runnable의 함수를 호출합니다. TimeUn…

[Java] Comparator로 문자열 정렬

Java에서 Comparator로 문자열 리스트를 정렬할 수 있습니다. Comparator는 어떻게 정렬할지에 대한 내용이 구현되어있는 객체입니다. 이 객체를 리스트의 함수에 전달하면 Comparator의 규칙에 맞게 정렬됩니다. Comparator 는 함수형 인터페이스이고, 메소드를 갖고 있습니다. 는 인자 o1과 o2 객체를 비교하고 결과를 리턴 비교 결과는 음수, 0, 양수 중에 하나이며, 각각 의미는 다음과 같습니다. 비교 결과로 리스트를 정렬을 할 수 있습니다. 음수 : o1이 o2보다 작음 0 : o1과 o2와 같음 양수 : o1이 o2보다 큼 Comparator는 다음과 같이 구현하여 사용할 수 있습니다. 클래스 파일을 만들고 구현을 추가할 수 있지만, 1회성으로 사용된다면 익명 클래스나, 람다식 또는 메소드 레퍼런스로 구현하여 인자로 전달함 대신에 를 사용할 수도 있음 Comparator로 문자열 리스트 정렬 아래 예제는 Comparator를 구현하여 문자열 리…

[Java] 배열 n개씩 나누기, 2가지 방법

하나의 배열을 n개의 배열로 잘라서 나누는 방법에 대해서 알아보겠습니다. 1. for문으로 직접 나누는 방법 분할할 배열 개수만큼 for문으로 돌면서, 기존 배열의 값을 새로운 배열에 분리해서 나눌 수 있습니다. : 새로운 배열의 크기 : n개로 나누고 남은 개수는 remainder에 저장하고, 배열에 나누서 할당 for문으로 원본 배열을 순회하면서, n개 또는 n+1개의 새로운 배열을 할당하고 값 복사 : originalArray의 startIndex에서 개수만큼 subArray의 Index 0부터 복사 분리된 배열의 길이가 같거나, remainder에 의해 1개 차이가 있을 수 있음 Output: 2. Stream을 이용한 방법 Stream과 Collectors.groupingBy()를 이용하여 여러 배열로 분리할 수 있습니다. 대신, 위에서 순차적으로 고정된 개수로 자르는 것이 아닌, 요소 값에 따라서 정해진 그룹으로 분리됩니다. : 의 값이 같은 것들끼리 그룹을 만…

[Java] List filter 예제, 3가지 방법

리스트에 저장된 요소들을 특정 기준으로 필터링하는 방법 및 예제를 소개합니다. 1. Stream.filter()를 이용한 방법 2. for문을 이용한 방법 3. List.removeIf()를 이용한 방법 1. Stream.filter()를 이용한 방법 리스트를 Stream으로 변환할 수 있으며, 으로 리스트의 요소들을 필터링할 수 있습니다. : 리스트 numbers를 Stream으로 변환 : 짝수인 요소만 필터링 : Stream 결과를 리스트로 변환 Output: Stream과 메소드 레퍼런스를 이용한 방법 위 예제에서 에 람다식을 전달하지 않고, 아래와 같이 메소드 레퍼런스를 전달할 수도 있습니다. 실행 결과는 동일합니다. 2. for문을 이용한 방법 다음과 같이 for문을 이용하여 리스트를 순회하면서 필터링할 수 있습니다. 필터링된 요소들은 다른 리스트에 저장합니다. Output: 3. List.removeIf()를 이용한 방법 리스트에서 특정 조건에 해당하는 요소들을 모…

[Java] List for문으로 탐색/순회

Java에서 for문을 이용하여 리스트를 탐색, 순회하는 방법에 대해서 알아보겠습니다. 1. for문을 이용한 방법 2. 향상된 for문을 이용한 방법 3. Iterator를 이용한 방법 4. Stream을 이용한 방법 5. Java 8의 forEach를 이용한 방법 1. for문을 이용한 방법 기본적인 for 루프입니다. for문에서 index를 리스트 크기까지 증가시키면서 리스트의 모든 요소를 순회합니다. : 인자로 전달된 객체들을 갖고 있는 리스트 생성 Output: 2. 향상된 for문을 이용한 방법 와 같은 형태를 향상된 for문이라고 합니다. 리스트의 모든 요소들이 순회하면서 fruit에 대입됩니다. 만약 index가 필요하다면 일반적인 for문을 사용해야 합니다. Output: 3. Iterator를 이용한 방법 리스트의 Iterator 객체를 얻고, Iterator를 통해서 리스트의 모든 요소를 순회할 수 있습니다. 아래 예제는 while을 사용하여 Iterato…

[Java] 리스트 랜덤 정렬, 3가지 방법

리스트의 요소들 순서를 랜덤으로 정렬하는 방법에 대해서 알아보겠습니다. 1. shuffle()을 이용한 방법 2. for문으로 직접 구현하는 방법 3. Stream을 이용한 방법 1. shuffle()을 이용한 방법 는 list의 요소들을 무작위로 섞습니다. 아래와 같이 리스트를 랜덤하게 정렬시킬 수 있습니다. Output: 2. for문으로 직접 구현하는 방법 아래 예제는 for문을 이용하여 shuffle을 구현하였습니다. Random을 이용하여 루프를 돌면서 무작위 수를 뽑고, 리스트의 값들을 변경하였습니다. : 0 ~ i 범위의 랜덤 숫자(index) 뽑음 리스트의 끝에서 앞으로 순회하면서 랜덤하게 swap Output: 3. Stream을 이용한 방법 아래와 같이 를 이용하여 랜덤하게 요소들을 정렬할 수 있습니다. : 0에서 3미만의 숫자 중에 랜덤하게 뽑음, 즉, 중에 하나가 랜덤으로 뽑힘 : -1, 0, 1 중에 랜덤하게 하나 뽑음, 에서 리턴 값 -1은 a가 작…

[Java] LocalDate를 문자열로 변환

Java에서 LocalDate 객체를 String으로 변환하는 다양한 방법에 대해서 알아보겠습니다. 1. toString()을 이용한 방법 2. DateTimeFormatter와 format()을 이용한 방법 3. 다른 날짜 형식으로 변환 1. toString()을 이용한 방법 LocalDate의 은 날짜 값을 문자열로 변환합니다. 아래 코드의 실행 결과를 보면 형식으로 출력됩니다. Output: 2. DateTimeFormatter와 format()을 이용한 방법 DateTimeFormatter와 format()을 이용하여 LocalDate를 문자열로 변환할 수 있습니다. 은 인자로 전달된 format에 맞게 문자열을 만들고 리턴합니다. 는 형식으로 문자열 생성 Output: 3. 다른 날짜 형식으로 변환 에서 기본으로 제공하는 패턴 대신에, 으로 Custom pattern을 전달할 수도 있습니다. 아래 예제에서는 패턴으로 formatter를 생성하여 날짜 문자열을 변환하였…

[Java] Map(HashMap) for문으로 탐색/순회

Java에서 HashMap 등, Map의 모든 요소들을 for문으로 탐색, 순회하는 방법에 대해서 알아보겠습니다. 1. for문과 Entry로 Map 순회 2. forEach()로 Map 순회 3. Map의 Key만 순회 4. Map의 Value만 순회 5. Stream의 forEach()로 Map 순회 1. for문과 Entry로 Map 순회 는 Entry 리스트를 리턴하며, Entry는 Map 요소의 쌍을 의미합니다. 아래와 같이 Entry 리스트를 순회하면서, Map의 모든 key와 value를 탐색할 수 있습니다. Output: 2. forEach()로 Map 순회 Map은 함수를 제공하며, 아래와 같이 key와 value를 순회할 수 있습니다. : forEach는 key와 value를 인자로 전달하고 리턴 값이 없는 함수를 인자로 받음 Output: 3. Map의 Key만 순회 는 Map의 모든 key 값을 갖고 있는 리스트를 리턴합니다. 아래와 같이 key들만 순…

[Java] 리스트 두개 합치기, 3가지 방법

Java에서 리스트 2개를 하나의 리스트로 합치는 방법에 대해서 알아보겠습니다. 1. List.addAll()을 이용한 방법 2. Stream을 이용한 방법 3. Collections.addAll()을 이용한 방법 1. List.addAll()을 이용한 방법 는 list1에 list2의 모든 요소를 추가합니다. list1에 list2의 요소가 추가되며, list2의 데이터는 변경되지 않음 Output: 원본 리스트는 변경 없이, 새로운 리스트에 병합 원본 리스트 list1과 list2의 데이터는 변경하지 않고, 새로운 리스트에 두개 리스트의 모든 요소를 합칠 수 있습니다. 새로운 리스트를 만들고 두개의 리스트에 대해서 로 합치기 2. Stream을 이용한 방법 을 이용하여 두개 리스트를 하나의 리스트로 합칠 수 있습니다. : list1과 list2를 Stream으로 만들고 하나로 병합 : 합쳐진 내용을 리스트로 리턴 list1과 list2의 데이터는 변하지 않고, 두개 리스트의…

[Java] Map 두개 합치기, 3가지 방법

HashMap 등, Map 2개를 하나의 Map으로 합치는 방법에 대해서 알아보겠습니다. 1. Map.putAll()을 이용한 방법 2. Map.merge()를 이용한 방법 3. Stream을 이용한 방법 1. Map.putAll()을 이용한 방법 은 map1에 map2의 모든 key-value 값을 추가합니다. : map1의 key-value 값을 갖고 있는 새로운 Map 객체 생성 : mergedMap에 map2의 모든 key-value 값 추가 동일한 key가 존재할 때, 늦게 추가되는 map의 key-value로 업데이트 (map1의 “C”-1의 경우, map2의 “C”-3으로 업데이트됨) Output: 2. Map.merge()를 이용한 방법 를 이용하여 두개의 Map을 합칠 수 있습니다. : map1에 entry의 key와 value를 key-value로 추가, 은 동일한 key 값이 추가될 때, 이전에 추가된 값(v1)을 사용하겠다는 의미. 아래 예제에서는 “C”…

[Java] 람다식과 메소드 참조(Method references)

Java에서 람다식과 함께 메소드 참조 방식을 사용할 수 있습니다. 메소드 참조 방식은 람다식 대신에 사용할 수 있으며, 코드가 짧아서 구현이 간단합니다. 메소드 참조 방식에 대해서 알아보겠습니다. 1. 메소드 참조(Method References) 2. 정적 메소드 참조(Static Method References) 3. 인스턴스 메소드 레퍼런스(Instance Method References) 4. 클래스 생성자 레퍼런스(Constructor References) 1. 메소드 참조(Method References) 메소드 참조(Method References)는 람다식을 더 간단하고 가독성 있게 작성할 수 있게 해줍니다. 즉, 간단한 방법으로 람다식을 표현하는 것이 메소드 참조라고 할 수 있습니다. 주로 함수형 인터페이스를 사용할 때 사용됩니다. 메서드 레퍼런스는 기호를 사용하여 표현하며, 메서드 이름과 클래스 또는 객체를 가리킵니다. 예를 들어, 아래 코드는 리스트의 모든 …

[Java] Multi thread, join()으로 종료 대기

Java에서 은 쓰레드의 종료를 기다릴 때 사용합니다. 멀티 스레드를 사용할 때, 으로 대기하는 방법에 대해서 알아보겠습니다. 1. Thread.join() 함수 2. 첫번째 스레드 종료 대기 후, 다른 스레드 실행 3. 2개 스레드 동시 실행 및 종료 대기 1. Thread.join() 함수 함수는 스레드가 종료될 때까지 대기하며, 종료 후 다음 코드가 실행됩니다. 아래 예제처럼 로 스레드가 실행된 후에, 을 호출하면 완료될 때까지 메인 스레드는 대기를 합니다. : 스레드 실행 (스레드가 생성되도 가 호출되지 않으면 동작하지 않음) : thread1의 작업이 완료될 때까지 대기, InterruptedException가 발생할 수 있으니 try-catch로 예외처리 필요 Output: 2. 첫번째 스레드 종료 대기 후, 다른 스레드 실행 두개의 스레드 Thread1과 Thread2가 있을 때, 두개를 동시에 실행시키지 않고 아래와 같이 순차적으로 실행시킬 때 을 이용할 수 있…

[Java] 정규표현식(Regular Expression) 사용법

자바에서 정규표현식(Regular Expression)을 사용하는 방법에 대해서 알아보겠습니다. 1. 정규표현식(Regular Expression) 2. 패턴 생성 방법 3. 패턴 매칭 방법 4. 문자열 패턴 매칭 5. String.replaceAll()의 정규표현식 6. String.split()의 정규표현식 7. 다른 정규표현식 예제 8. 정규표현식 문법 1. 정규표현식(Regular Expression) 정규표현식, 정규식은 어떤 패턴을 갖고 있는 문자열 집합을 표현하는 방법입니다. 기본적으로 아래 두가지 과정을 거쳐, 문자열에서 정규표현식과 일치하는 패턴을 찾을 수 있습니다. 패턴 생성 패턴 매칭 2. 패턴 생성 방법 는 regex에 대한 객체를 생성합니다. Pattern 객체로 문자열 매칭을 하여 regex와 일치하는 문자열을 찾을 수 있습니다. 3. 패턴 매칭 방법 기본적으로 패턴 매칭은 Matcher를 이용합니다. Matcher는 으로 생성할 수 있습니다. 이렇게 생…

[Java] 현재 날짜, 시간 가져오기

Java에서 현재 날짜와 시간을 가져오는 방법에 대해서 알아보겠습니다. 1. 현재 날짜, 시간 가져오기 2. 날짜, 시간의 형식 변경 3. 다른 지역의 현재 날짜, 시간 가져오기 1. 현재 날짜, 시간 가져오기 다음 함수들을 이용하여 현재 날짜와 시간 정보를 갖고 있는 객체를 생성할 수 있습니다. : 현재 날짜를 갖고 있는 LocalDate 객체 리턴 : 현재 시간을 갖고 있는 LocalTime 객체 리턴 : 현재 날짜와 시간을 갖고 있는 LocalDateTime 객체 리턴 Output: 년/월/일/시/분/초 정보 가져오기 LocalDateTime, LocalDate, LocalTime에서 아래와 같은 메소드를 제공하며 다음과 같은 정보를 리턴합니다. 물론 LocalDate의 경우 시간 정보는 없기 때문에 같은 시간 함수는 제공하지 않습니다. 또한, LocalTime의 경우 날짜 정보 함수를 제공하지 않습니다. : 년도 값 리턴 : 월 값 리턴 : 일 값 리턴 : 시…

[Java] 현재 시간 초단위, 밀리세컨드로 가져오기

현재 날짜/시간 값을 초 단위 또는 밀리세컨드 단위로 변환하는 방법에 대해서 알아보겠습니다. 1. System.currentTimeMillis()를 이용한 방법 2. LocalDateTime.toEpochSecond()를 이용한 방법 1. System.currentTimeMillis()를 이용한 방법 는 현재 시스템의 시간을 밀리초(milliseconds) 단위 값으로 리턴합니다. 이 값은 UTC 시간으로, 즉, 1970년 1월 1일 00:00:00 UTC (협정 세계시)로부터 현재까지 경과한 시간입니다. 이 값을 이용하여 시스템의 상대적인 시간을 계산하거나 비교할 수 있습니다. : UTC 시간을 밀리세컨드 단위로 리턴 Output: 초 단위로 변경 위에서 가져온 밀리세컨드 값을 1000으로 나눠서 초 단위로 변환할 수 있습니다. 2. LocalDateTime.toEpochSecond()를 이용한 방법 는 LocalDateTime의 시간을 Epoch(UTC) 시간으로 변환합니다.…

[Java] 함수형 인터페이스(Functional Interface)

함수형 인터페이스(Functional Interface)는 하나의 추상 메서드만을 가지며, 람다식 또는 메서드 참조를 이용해 함수 객체를 생성할 수 있는 인터페이스입니다. Java는 Java 8부터 함수형 인터페이스를 통해 함수형 프로그래밍을 지원합니다. 함수형 인터페이스 생성 함수형 인터페이스 사용 방법 함수형 인터페이스를 익명 클래스로 구현 Java의 기본 함수형 인터페이스 Runnable: () -> void Supplier: () -> T Consumer: T -> void Function: T -> R Predicate: T -> boolean BiFunction: (T, U) -> R UnaryOperator: T -> T BinaryOperator: (T, T) -> T 함수형 인터페이스 생성 함수형 인터페이스는 아래와 같이 1개의 추상 메소드가 있어야 합니다. 어노테이션은 이 인터페이스가 함수형 인터페이스라는 것을 표시 : 인자 1개를 받고 리턴 값이 있는 추상…

[Java] 파일명 확장자 분리, 가져오기

파일의 이름은 파일 이름과 확장자로 되어있는데, 파일명과 확장자를 분리하여 가져오는 방법에 대해서 알아보겠습니다. 예를 들어, 파일에서 example과 txt를 따로 얻는 것입니다. 1. lastIndexOf()로 파일명, 확장자 얻기 2. 파일 경로에서 파일명, 확장자 얻기 1. lastIndexOf()로 파일명, 확장자 얻기 파일 이름을 변수로 가져왔다고 가정하고, 파일명과 확장자를 분리하는 코드를 작성하였습니다. : fileName 문자열의 오른쪽에서 문자를 찾고 index를 리턴 : 문자열에서 index부터 마지막 Index 범위의 문자열을 잘라서 리턴 : 문자의 다음 위치부터 마지막 문자까지 잘라서 리턴 파일 이름에서 문자가 없으면 잘못된 파일로 처리 Output: 2. 파일 경로에서 파일명, 확장자 얻기 파일 경로의 경우, 위와 같은 방식으로 파일명과 확장자를 분리할 수 없습니다. 의 경우, 위처럼 분리하면 아래처럼 됩니다. 파일명: 확장자: 이것을 해…

[Java] 하위 폴더 파일 목록 가져오기

어떤 디렉토리 아래에 있는 모든 파일/폴더들을 가져오는 방법에 대해서 알아보겠습니다. 1. File을 이용하여 하위 파일 리스트 가져오기 2. Path와 Files를 이용하여 하위 파일 리스트 가져오기 1. File을 이용하여 하위 파일 리스트 가져오기 File과 재귀함수를 이용하여 아래와 같이 디렉토리 하위 파일들을 모두 출력할 수 있습니다. : 파일이 디렉토리라면, 바로 아래 경로에 있는 모든 파일 리스트를 File 배열로 리턴 : file이 디렉토리라면, 하위 경로의 파일 목록을 출력하기 위해 재귀함수 호출 Output: 2. Path와 Files를 이용하여 하위 파일 리스트 가져오기 Java 7에서 추가된 Path와 Files를 이용하면 더 간단히 하위 파일, 폴더 리스트를 가져올 수 있습니다. 는 인자로 전달된 디렉토리의 하위 모든 파일/폴더에 대해서 탐색하며 콜백으로 Path 객체를 받을 수 있습니다. Path를 통해 File 객체를 얻을 수도 있습니다. : 하위 …

[Java] 파일 용량 체크, 2가지 방법

자바에서 File의 용량(크기)을 가져오는 방법에 대해서 알아보겠습니다. 1. File.length()를 이용한 방법 2. Files.size()를 이용한 방법 1. File.length()를 이용한 방법 는 File의 크기를 바이트 단위로 리턴합니다. 1024로 나누면 KB로 변환할 수 있으며, 다시 1024로 나누면 MB로 변환할 수 있습니다. Output: 2. Files.size()를 이용한 방법 Java 7 이상에서, Path와 Files를 이용하여 파일 크기를 가져올 수 있습니다. : Path의 용량을 바이트로 리턴 바이트를 1024로 나누어 KB, MB 단위로 변환할 수 있음 Output:

[Java] 배열에서 랜덤 값 뽑기, 3가지 방법

배열의 요소들 중에 랜덤으로 하나의 값을 추출하는 방법에 대해서 알아보겠습니다. 1. Random()을 이용한 방법 2. Math.random()을 이용한 방법 3. ThreadLocalRandom을 이용한 방법 1. Random()을 이용한 방법 는 0에서 length 미만의 숫자들 중에 하나를 랜덤으로 리턴합니다. 따라서, 배열 길이 범위 내에서 무작위로 index를 뽑고, 그 index로 배열 값을 가져올 수 있습니다. : 0 ~ (length - 1) 범위의 무작위 값 뽑음 Output: 2. Math.random()을 이용한 방법 은 0에서 1사이의 무작위 난수를 뽑습니다. 여기에 배열 길이를 곱하면 0에서 배열 길이 사이의 난수가 생성됩니다. 이것을 index로 사용하여 랜덤 배열 값을 가져올 수 있습니다. : 0 ~ 4 범위의 랜덤 index 생성 Output: 3. ThreadLocalRandom을 이용한 방법 ThreadLocalRandom는 Java 7에서 사…

[Java] 문자열 위치 찾기 (indexOf/lastIndexOf)

문자열에서 특정 문자열의 위치(index)를 찾는 함수는 와 가 있습니다. 이 함수들을 사용하여 문자열 위치를 찾는 방법에 대해서 알아보겠습니다. 1. indexOf(), lastIndexOf() 2. 특정 Index 부터 문자/문자열 찾기 1. indexOf(), lastIndexOf() 두개의 함수는 문자 또는 문자열을 찾고 index를 리턴하지만, 탐색 방향이 다릅니다. : 문자열의 왼쪽에서 오른쪽 방향으로 문자를 찾고 문자열의 첫 글자 Index 리턴 : 문자열의 오른쪽에서 왼쪽 방향으로 문자를 찾고 문자열의 첫 글자 Index 리턴 문자(char)의 index 찾기 는 왼쪽부터 탐색하며, 가장 먼저 찾은 문자의 Index를 리턴합니다. 아래 예제는 문자열의 왼쪽에서 오른쪽 방향으로 문자 를 찾고, Index 4를 리턴 문자를 못찾으면 -1을 리턴 Output: 는 오른쪽에서 왼쪽 방향으로 탐색하며, 가장 먼저 찾은 문자의 Index를 리턴합니다. 아래 예제는 오른쪽에서…

[Java] 리눅스 명령어 실행

Java에서 코드로 리눅스 명령어(shell command)를 실행하는 방법에 대해서 알아보겠습니다. 1. 단순한 명령어 실행 2. 명령어 실행 및 결과 받기 3. ProcessBuilder로 명령어 실행, 결과 받기 1. 단순한 명령어 실행 를 이용하여 명령어를 실행할 수 있습니다. 실행 결과를 확인하지 않고 명령어만 실행합니다. 실행 결과를 읽는 방법은 다음에 소개합니다. : command를 실행 : 명령어 실행이 완료될 때까지 기다리며 정상적으로 종료되면 0을 리턴 Output: 2. 명령어 실행 및 결과 받기 으로 명령어를 실행하고, 리턴된 로 실행 결과를 읽을 수 있습니다. : 명령어 실행 결과에 대한 InputStream 리턴 : 실행 결과를 한 줄씩 리턴 : 명령어 실행이 완료될 때까지 기다리며 정상적으로 종료되면 0을 리턴 Output: 3. ProcessBuilder로 명령어 실행, 결과 받기 ProcessBuilder를 사용하여 명령어를 실행할 수 있으며…

[Java] 천단위 콤마, 쉼표 넣기

천단위 숫자마다 콤마(,)를 넣는 방법에 대해서 알아보겠습니다. 아래와 같이 숫자에, 읽기 쉽게 천단위 마다 쉼표를 추가하려고 합니다. 1. DecimalFormat를 이용한 방법 2. String.format()을 이용한 방법 3. NumberFormat을 이용한 방법 1. DecimalFormat를 이용한 방법 double 자료형의 숫자를 천단위마다 쉼표를 넣고 문자열로 변경하는 예제입니다. 소수가 있는 경우, 소수 2자리까지 출력하도록 했습니다. : 천단위마다 쉼표 추가, 소수 2자리의 숫자로 변환하는 포맷 소수점 이하 숫자를 버리고 정수만 허용하려면 포맷을 사용하면 됨 : number에 포맷을 적용한 문자열 리턴 Output: 2. String.format()을 이용한 방법 로 숫자에 포맷을 적용할 수도 있습니다. : 포맷 적용한 문자열 리턴, 천단위마다 쉼표 추가, 소수 2자리까지 : 천단위마다 쉼표 추가, 소수는 버림 Output: 3. NumberFormat을…

[Java] 날짜/시간에 년, 월, 일, 시간 더하기 빼기

LocalDate, LocalDateTime 등의 날짜/시간 객체에 년, 월, 일, 시, 분, 초를 더하고 빼는 방법에 대해서 알아보겠습니다. 1. LocalDateTime의 날짜/시간 계산 2. 두 LocalDateTime 객체의 더하기/빼기 1. LocalDateTime의 날짜/시간 계산 날짜/시간 더하기 LocalDateTime는 아래와 같은 메소드를 제공하며, 각각 인자로 전달된 월, 일, 시간, 분, 초 값을 LocalDateTime 객체에 더합니다. plusYears() : 년 더하기 plusMonths() : 월 더하기 plusDays() : 일 더하기 plusHours() : 시간 더하기 plusMinutes() : 분 더하기 plusSeconds() : 초 더하기 Output: 날짜/시간 빼기 LocalDateTime는 아래와 같은 메소드를 제공하며, 각각 인자로 전달된 월, 일, 시간, 분, 초 값을 LocalDateTime 객체에서 뺍니다. minusYears(…

[Java] 배열 교집합 구하기, 3가지 방법

두개의 배열에서 공통 요소(교집합)를 구하는 방법에 대해서 알아보겠습니다. 1. Set를 이용한 방법 2. for문을 이용한 방법 3. Stream을 이용한 방법 1. Set를 이용한 방법 Set는 이라는 함수가 있습니다. 는 set1에서 set2와의 교집합 요소들만 남기고 다른 요소들을 모두 삭제합니다. 이 함수를 이용하여 교집합을 구할 수 있습니다. 먼저 배열을 Set로 변환 : set1과 set2의 공통 요소만 남기고 모두 제거 : Set를 배열로 변환 Output: 2. for문을 이용한 방법 2중 for문으로 두개의 배열을 순회하면서 공통 요소를 다른 리스트에 저장할 수 있습니다. 교집합 연산이 끝나고, 리스트는 다시 배열로 변환할 수 있습니다. Output: 3. Stream을 이용한 방법 Set를 이용한 방법과 동일한데, 배열을 Set로 변환할 때 Stream을 사용하여 짧은 코드로 변환할 수 있습니다. : array1을 Set로 변환 Output:

[Java] 배열 랜덤 정렬, 2가지 방법

배열의 요소 순서를 랜덤하게 정렬하는 방법에 대해서 알아보겠습니다. 1. Collections.shuffle()을 이용한 방법 2. 직접 구현하는 방법 1. Collections.shuffle()을 이용한 방법 은 list를 랜덤하게 섞어서 정렬합니다. : array의 모든 요소 값들을 문자열로 리턴 이것을 이용하여, 배열을 리스트로 먼저 정렬 후에 shuffle()로 랜덤 정렬하고, 다시 리스트를 배열로 변환하는 방법이 있습니다. Output: 2. 직접 구현하는 방법 아래 예제는 for문을 이용하여 shuffle을 구현하였습니다. Random을 이용하여 루프를 돌면서 무작위 수를 뽑고, 배열의 값들을 변경합니다. : 0 ~ i 범위의 랜덤 숫자(index) 뽑음 배열의 뒤에서 앞으로 순회하면서 랜덤하게 swap Output:

[Java] String 날짜, 시간 비교

문자열(String)로 표현된 날짜, 시간들을 비교하는 방법을 알아보겠습니다. 날짜/시간을 비교하면 어떤 시간이 빠른지, 느린지 알 수 있습니다. 1. 날짜, 시간 문자열 비교 2. 시간 문자열 비교 1. 날짜, 시간 문자열 비교 SimpleDateFormat과 Date를 이용한 방법 아래와 같이 SimpleDateFormat과 Date를 이용하여 문자열로 된 날짜, 시간 문자열을 파싱할 수 있습니다. 파싱된 Date 객체는 와 함수를 이용하여 시간 선, 후 관계를 비교할 수 있습니다. : A가 B보다 이전 시간일 때 true 리턴 : A가 B보다 이후 시간일 때 true 리턴 before()와 after()가 모두 false일 때는 같은 시간 Output: LocalDateTime을 이용한 방법 대신에 로 날짜, 시간 문자열을 파싱하여 LocalDateTime 객체로 만들 수 있습니다. 대신, 인자로 문자열과 SimpleDateFormat 객체를 전달합니다. 파싱된 Loc…

[Java] CompletableFuture 사용법

Java 8에서 소개된 CompletableFuture는 비동기(Async) 및 병렬 작업을 수행하는데 사용되는 클래스입니다. CompletableFuture로 비동기 연산을 수행하고 해당 작업이 완료될 때 콜백 함수를 호출하여 다른 작업을 수행시킬 수도 있습니다. 예제를 통해 CompletableFuture의 사용 방법에 대해서 알아보겠습니다. 1. 기본적인 비동기 작업 생성 2. supplyAsync(), runAsync()로 비동기 작업 생성 3. 연속적인 비동기 작업 정의 : thenApply(), thenAccept(), thenRun() 4. 순차적인 비동기 작업 정의 : thenCompose() 5. 병렬 처리 : thenCombine() 1. 기본적인 비동기 작업 생성 아래 예제는 CompletableFuture를 사용하여 비동기 작업을 기다리고 결과를 받아서 출력하는 예제입니다. 두개의 스레드 thread1과 thread2가 있을 때, thread1은 Future를…

[Java] 2차원 배열 1차원 배열로 변환, 2가지 방법

2차원 배열을 1차원 배열로 변환하는 것을 평탄화(flatten)라고 하는데, 어떻게 하는지 알아보겠습니다. 1. for문을 이용한 방법 2. Stream을 이용한 방법 1. for문을 이용한 방법 2중 for문을 사용하여 2차원 배열을 1차원 배열로 변환할 수 있습니다. 먼저 2차원 배열의 요소 개수만큼의 1차원 배열 생성 2중 for문으로 2차원 배열을 순회하면서 1차원 배열에 값 할당 Output: 2. Stream을 이용한 방법 Stream의 를 사용하여 2차원 배열을 평탄화 할 수 있습니다. 2차원배열을 Stream으로 만듬 : 2차원 배열을 평탄화 : 결과를 배열로 변환 Output:

[Java] 각 단어의 첫 글자 대문자로 변환

각 단어의 첫 글자만 대문자로 변환하는 방법에 대해서 알아보겠습니다. 1. 각 단어의 첫 글자 대문자로 변환 2. 문장의 첫 글자 대문자로 변환 1. 각 단어의 첫 글자 대문자로 변환 먼저 문자열을 공백 기준으로 분리하여 단어 단위로 분리합니다. 그리고 단어의 첫 글자만 대문자로 변환하고 나머지는 그대로 둡니다. : 문자열을 공백으로 분리하여 배열로 리턴 : 단어의 첫 글자를 대문자로 변환 : 첫 글자를 제외한 나머지 문자열만 잘라서 저장, 는 문자열의 index부터 끝까지 잘라서 리턴 : 대문자로 변환한 첫글자와 나머지 부분을 다시 합침, 마지막에 공백 문자도 추가 : 문자열 앞, 뒤에 추가된 공백을 모두 제거 Output: 2. 문장의 첫 글자 대문자로 변환 문장의 첫 글자만 대문자로 변환하고 나머지는 그대로 두려면, 위에서 처리한 것과 동일하게, 문장의 첫 글자를 가져와서 대문자로 변환하고, 첫 글자를 제외한 나머지 문자열을 잘라냅니다. 그리고 첫글자와 나머지 문장을…

[Java] LocalDateTime Timestamp(Epoch) 변환

LocalDateTime을 Timestamp(Epoch time, UTC millis)으로 변환하거나 Timestamp를 LocalDateTime으로 변환하는 방법에 대해서 알아보겠습니다. 1. LocalDateTime과 Timestamp 2. LocalDateTime을 Timestamp로 변환 3. Timestamp를 LocalDateTime으로 변환 1. LocalDateTime과 Timestamp LocalDateTime LocalDateTime은 Java8에서 추가된 클래스로, 날짜와 시간 정보를 다루는 클래스입니다. Timestamp Timestamp는 Epoch time 또는 Unix Epoch time라고도 하며, 1970년 1월 1일 00:00:00 UTC(협정 세계시)를 기준으로 현재까지 경과한 시간을 나타냅니다. Java에서 으로 현재 시간의 Epoch time을 millisecond로 얻을 수 있습니다. 2. LocalDateTime을 Timestamp로 변환 …

[Java] 2차원 배열 복사

깊은 복사를 이용하여 2차원 배열을 복사하는 방법에 대해서 알아보겠습니다. 1. Arrays.copyOf()를 이용한 방법 2. System.arraycopy()를 이용한 방법 3. for문을 이용한 방법 1. Arrays.copyOf()를 이용한 방법 은 array 배열의 Index 0부터 n개 까지 복사한 배열을 만들어서 리턴합니다. 따라서, 아래와 같이 for문을 이용하여 2차원 배열을 복사할 수 있습니다. : 2차원 배열의 행(row) 복사 for문으로 모든 행(row) 복사 깊은 복사를 하였기 때문에, 원본 배열의 값을 변경해도 복사된 배열에 영향을 주지 않음 Output: 2. System.arraycopy()를 이용한 방법 는 src 배열의 srcIndex에서 length 개수만큼의 값들을 des 배열의 desIndex부터 (desIndex + length -1) 인덱스까지 복사합니다. : 배열의 행(row) 복사 for문으로 모든 행(row) 복사 깊은 복사 Ou…

[디자인패턴] 싱글턴 패턴 (Singleton)

싱글턴 패턴은 소프트웨어 디자인 패턴 중 하나로, 특정 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하는 패턴입니다. 이 패턴은 전역 변수를 사용하지 않고 객체를 전역적으로 액세스할 수 있게 해줍니다. 싱글턴 패턴의 목적 및 장점 싱글턴 패턴은 다음과 같은 목적과 장점이 있습니다. 1개의 객체 생성 보장: 싱글턴 패턴을 사용하면, 클래스의 인스턴스가 하나만 생성되는 것을 보장할 수 있음 전역 접근: 싱글턴 패턴을 사용하면, 객체를 인자로 전달하지 않아도 어디서든지 접근할 수 있음. 객체 생성 지연 : 싱글턴 객체는 필요할 때 생성됨. 데이터 공유 : 1개의 객체에서 모든 작업이 처리되기 때문에, 자원을 공유할 수 있음 시스템 디자인 측면에서 주의할 점 싱글턴 패턴이 디자인에 미치는 단점으로, 아래와 같은 내용을 주의해야 합니다. 유연성 저하: 싱글턴 패턴은 OOP의 원칙 중 하나인 “개방/폐쇄 원칙”을 위반할 수 있습니다. 확장이 어렵고 변경이…

[Python] 2차원 리스트 합/평균 계산

2차원 리스트의 평균을 계산하는 방법을 소개합니다. 행에 대한 합계 및 평균 열에 대한 합계 및 평균 전체 요소들의 합계 및 평균 1. 2차원 리스트의 합계/평균 계산 2. zip(*data)에 대한 간단한 설명 1. 2차원 리스트의 합계/평균 계산 아래와 같이 2차원 리스트의 행/열의 합계 및 평균을 계산할 수 있습니다. : 2차원 리스트의 같은 열끼리 묶어서 튜플로 리턴 : 같은 행의 요소들끼리 합계 계산하여 리스트 리턴 : 같은 행의 합계를 행의 요소 개수로 나눠서 평균 계산 : 모든 행의 합계를 리스트의 전체 요소 개수로 나눠서 리스트 평균 계산 Output: 2. zip(*data)에 대한 간단한 설명 처럼 인자로 를 전달하면 리스트의 각 행에서 첫번째 열의 요소를 튜플로 묶습니다. 위 코드의 실행 결과는 다음과 같으며, 각 열의 요소들끼리 묶여서 출력되었습니다.

[Python] 2차원 리스트 슬라이싱, 다양한 예제

2차원 리스트 슬라이싱에 대한 다양한 예제를 소개합니다. 1. 특정 범위의 행(row) 추출 2. 특정 행(row) 추출 3. 특정 범위 열(column)에 대한 행 추출 4. 특정 범위의 열 추출 5. 특정 열(column) 추출 6. 특정 조건을 만족하는 행만 가져오기 7. 특정 조건을 만족하는 열만 가져오기 1. 특정 범위의 행(row) 추출 는 2차원 리스트의 Index 0부터 1까지의 행에 해당하는 첫번째와 두번째 행을 가져옵니다. Output: 2. 특정 행(row) 추출 특정 행만 추출하려면 아래와 같이 index 범위를 설정하면 됩니다. Output: 3. 특정 범위 열(column)에 대한 행 추출 특정 열의 범위에 해당하는 행 값만 가져올 때 아래와 같이 구현할 수 있습니다. 아래 예제는 모든 행을 가져오는데, 2열부터 마지막 열에 해당하는 값들만 가져옴 Output: 4. 특정 범위의 열 추출 특정 범위의 열을 추출하여 하나의 리스트에 저장하려면 아래와 같이 구…

[Python] 공휴일, 주말 확인 방법

어떤 날짜가 공휴일 또는 휴일인지 확인하는 방법에 대해서 알아보겠습니다. 1. 공휴일 확인 방법 2. 주말 확인 방법 1. 공휴일 확인 방법 휴일 외에, 개천절 같은 공휴일은 holidays 라이브러리로 확인할 수 있습니다. holidays 라이브러리는 아래와 같이 pip로 설치할 수 있습니다. 아래 예제는 holidays를 사용하여 어떤 날짜가 공휴일인지 확인하는 예제입니다. : 대한민국 공휴일에 대한 holidays 객체 생성 : 문자열을 date 객체로 변환 : 날짜가 공휴일에 포함되어있는지 체크 Output: 2. 주말 확인 방법 어떤 날짜가 주말(토요일, 일요일)인지 확인하려면 datetime의 weekday()를 이용하여 구현할 수 있습니다. : 특정 날짜의 datetime 객체 생성 : 특정 날짜의 요일 정보를 0에서 6의 숫자로 리턴 (0: 월요일, 1: 화요일, …, 6: 일요일) : 요일이 토요일인지 일요일인지 확인 Output:

[Python] 대소문자 구분 없이 비교

문자열을 대소문자 구분 없이 같은지 비교하는 방법에 대해서 알아보겠습니다. 1. lower(), upper()를 이용한 방법 2. casefold()를 이용한 방법 3. 정규표현식을 이용한 방법 1. lower(), upper()를 이용한 방법 두개의 문자열을 비교할 때, 모두 소문자로 변경하여 비교하거나 대문자로 변경하여 비교하면 대소문자 구분 없이 같은지 비교할 수 있습니다. : 문자열을 소문자로 변경 : 문자열을 대문자로 변경 Output: lower()와 upper()의 리턴 값을 출력해보면 아래와 같이 소문자, 대문자로 변환됩니다. Output: 2. casefold()를 이용한 방법 도 와 동일하게 소문자로 변경합니다. 차이점은 의 경우 다른 언어의 대소문자도 변경하지만 의 경우 영어만 소문자로 변경합니다. 대소문자가 있는 다른 언어가 포함된 문자열을 비교한다면 보다 로 비교하는 것이 좋습니다. Output: 아래 예제를 보시면, casefold()는 독일어의 대문자…

[Python] 2진수 변환 함수, 3가지

10진수를 2진수로 변환하는 함수와 방법에 대해서 알아보겠습니다. 1. bin() 함수를 이용한 방법 2. 비트 연산자를 이용한 방법 3. 반복문으로 2진수 변환 1. bin() 함수를 이용한 방법 은 10진수 n을 2진수의 문자열로 변환합니다. 리턴 값에 2진수를 의미하는 가 문자열 앞에 붙음 리스트 슬라이싱을 이용하여 를 제거할 수 있음 Output: 2. 비트 연산자를 이용한 방법 비트 연산자 와 를 이용하여 직접 변환하는 코드를 구현할 수 있습니다. 아래 코드는 다음과 같은 순서로 동작합니다. 10진수의 1비트에 해당하는 값을 문자열에 저장 10진수를 오른쪽으로 1bit 이동 10진수의 1비트에 해당하는 값을 문자열의 끝에 추가 10진수가 0이 될 때까지 반복하고, 문자열을 거꾸로 뒤집으면 2진수가 됨 Output: 3. 반복문으로 2진수 변환 10진수를 2로 나누면서 나머지를 2진수 문자열에 저장하면서, 직접 2진수로 변환합니다. 10진수가 0인 경우, binary_str…

[Python] 2차원 리스트 깊은 복사, 2가지 방법

2차원 리스트를 깊은 복사(deep copy) 방식으로 복사하는 방법에 대해서 알아보겠습니다. 1. copy.deepcopy()를 이용한 방법 2. 리스트 컴프리헨션을 이용한 방법 1. copy.deepcopy()를 이용한 방법 는 original_list를 깊은 복사한 리스트를 리턴합니다. 깊은 복사로 리스트를 복사하면, 원본 또는 복사된 리스트를 변경했을 때 서로의 객체 값을 변경하지 않음 얕은 복사로 리스트를 복사하면, 원본 또는 복사된 리스트의 값 변경 시, 동시에 값이 변경 됨 아래와 같이 deepcopy()로 복사하고, 값을 변경한 뒤에 다시 결과를 출력해보면 서로의 객체 값에 영향을 주지 않는 것을 확인할 수 있습니다. Output: 2. 리스트 컴프리헨션을 이용한 방법 리스트 컴프리헨션을 이용하여 깊은 복사를 할 수 있습니다. 아래와 같이 2차원 리스트에 대해서 리스트 슬라이싱을 이용하여 1차원 리스트를 복사하고, 그 리스트를 2차원 리스트에 저장합니다. for문으로…

[Python] 텍스트 파일 줄 수 세기

텍스트 파일의 문자열들이 전체 몇 라인인지, 줄 수를 세는 방법에 대해서 알아보겠습니다. 1. file.readlines()를 이용한 방법 2. file.readline()을 이용한 방법 3. enumerate()를 이용한 방법 1. file.readlines()를 이용한 방법 는 파일의 텍스트들을 라인으로 읽어서 리스트로 리턴합니다. 즉, 리스트의 크기(size)를 계산하면 텍스트 파일의 줄 수를 알 수 있습니다. Output: 2. file.readline()을 이용한 방법 는 파일에서 한 줄을 읽고 문자열을 리턴합니다. 아래와 같이 while을 이용하여 더 이상 읽을 것이 없을 때까지 읽으면서 라인 수를 셀 수 있습니다. Output: 3. enumerate()를 이용한 방법 은 파일에 대해서 라인 번호와 문자열을 튜플로 리턴하는데, 이걸 리스트로 변환하고, 리스트의 크기를 구하면 전체 라인 수가 됩니다. Output: enumerate() 리턴 값 을 출력해보면, 아래와 같…

[Javascript] 정규표현식, 특정 문자로 시작/끝나는 문자열

정규표현식을 사용하여 어떤 문자열이 특정 문자열로 시작하는지, 끝나는지 확인하는 방법을 알아보겠습니다. 정규표현식을 사용하면, 정확한 문자열을 입력하지 않아도, 패턴만 입력하면 그 패턴과 일치하는 다양한 문자열 조합들을 찾을 수 있습니다. 또한, 정규식에 익숙해지면 사용하는 것도 쉽습니다. 2. 정규표현식으로 문자열 찾기 2. 특정 문자열로 시작하는 정규식 패턴 3. 특정 문자열로 끝나는 정규식 패턴 2. 정규표현식으로 문자열 찾기 RegExp.test(str)를 사용하면, 정규표현식으로 특정 패턴의 문자열을 찾을 수 있습니다. 은 문자열이 정규표현식 패턴에 해당할 때 true, 그렇지 않으면 false를 리턴합니다. 아래 예제에서 패턴은 이며, 단순하게 문자열만 포함되어있으면 test()는 true를 리턴합니다. 정규식 패턴을 사용하면 특정 문자열로 시작할 때, 끝날 때를 체크할 수 있습니다. Output: 2. 특정 문자열로 시작하는 정규식 패턴 아래 예제는 어떤 문자열이 특정…

[Javascript] 문자열 모든 공백 제거

정규표현식과, 을 사용하여 문자열의 모든 공백을 제거하는 방법에 대해서 알아보겠습니다. 1. 정규표현식으로 모든 공백 제거 2. split()으로 모든 공백 제거 1. 정규표현식으로 모든 공백 제거 함수를 이용하여, 공백 문자에 대한 정규표현식 패턴으로 공백을 찾고, 빈문자열("")로 변환하여 모두 제거할 수 있습니다. : pattern에 해당하는 문자열을 repl로 교체 는 공백 문자 1개에 대한 패턴, 는 문자열에 존재하는 모든 패턴 찾는 것을 의미 는 문자열의 모든 공백을 찾음 : 모든 공백을 빈문자열로 교체하여 제거 Output: 2. split()으로 모든 공백 제거 은 문자열을 str 기준으로 분리하여, 각각의 문자열을 배열에 담아 리턴합니다. 은 배열의 모든 요소를 하나의 문자열로 합치며, 각각의 요소 사이에 str을 추가합니다. 이것들을 이용하여, 문자열을 공백 문자로 분리하고, 각 요소들을 하나의 문자열로 합치면 공백이 제거됩니다. Output:

[Javascript] 문자열 첫번째 문자 제거

문자열에서 첫번째 문자를 제거하는 방법에 대해서 알아보겠습니다. 예를 들어, 가끔 문자열 앞에 가 있는 경우, 첫글자를 제거하여 깔끔하게 만들고 싶을 때가 있습니다. 예제를 통해 어떻게 구현하는지 알아보겠습니다. 1. substring()을 이용한 방법 2. slice()를 이용한 방법 3. for문을 이용한 방법 1. substring()을 이용한 방법 substring(start)은 문자열에서 start Index부터 문자열 끝까지 잘라서 문자열로 리턴합니다. 이것을 이용하여, 으로 첫글자를 제외한, Index 1부터 마지막까지 자르면 첫번째 문자만 제거할 수 있습니다. Output: 2. slice()를 이용한 방법 도 slice와 동일하게, 문자열에서 start Index부터 문자열 끝까지 잘라서 문자열로 리턴합니다. 아래와 같이 문자열에서 첫번째 문자만 제거할 수 있습니다. Output: 3. for문을 이용한 방법 for문을 사용하여 첫글자(index 0)를 제외한, 나…

[Javascript] 배열 첫번째 값 제거, 3가지 방법

배열의 요소들 중에서 가장 첫번째 값을 제거하는 방법에 대해서 알아보겠습니다. 1. slice()를 이용한 방법 2. shift()를 이용한 방법 3. splice()를 이용한 방법 1. slice()를 이용한 방법 slice(start)는 start Index에서 배열 끝까지 잘라서 리턴합니다. : 배열의 Index 1부터 끝까지 잘라서 리턴 Output: 2. shift()를 이용한 방법 shift()는 배열의 첫번째 요소를 제거하고, 그 값을 리턴합니다. 아래와 같이 첫번째 값을 제거하고, 그 값을 확인할 수 있습니다. Output: 3. splice()를 이용한 방법 splice(start, deleteCount)는 start Index부터 deleteCount 개수만큼 요소를 제거합니다. 리턴 값은 삭제된 값이 들어있는 배열이 리턴됩니다. : 배열의 Index 0에서 요소 1개 제거 Output:

[Javascript] 문자열 마지막 문자 제거

문자열의 마지막 문자를 제거하는 방법에 대해서 알아보겠습니다. 예를 들어, 가끔 문자열 끝에 가 있는 경우, 마지막 문자를 제거하여 깔끔하게 만들고 싶을 때가 있습니다. 이럴 때 사용할 수 있습니다. 1. substring()을 이용한 방법 2. slice()를 이용한 방법 3. 정규표현식을 이용한 방법 4. 마지막 문자가 특정 문자인 경우만 제거 1. substring()을 이용한 방법 는 문자열에서 start Index를 포함하고, end를 포함하지 않는 범위의 문자열을 잘라서 리턴합니다. 즉, 는 Index 0에서 문자열 마지막 문자 이전까지 잘라서 문자열로 리턴하며, 이렇게 마지막 문자를 제거할 수 있습니다. Output: 2. slice()를 이용한 방법 slice()도 substring()과 동일하게 특정 범위 Index의 문자열을 잘라서 리턴합니다. 약간의 차이점이 있는데, slice의 경우 음수 범위의 Index를 입력할 수 있으며, -1은 문자열 끝 바로 이전의 I…

[Javascript] 배열 마지막 값 제거, 3가지 방법

배열에서 마지막 요소를 제거하는 방법에 대해서 알아보겠습니다. 배열의 요소들 중에, 마지막 값만 제거해야하는 경우가 간혹 있는데요. 이럴 때 사용할 수 있습니다. 1. pop()을 이용한 방법 2. slice()를 이용한 방법 3. length를 이용한 방법 1. pop()을 이용한 방법 은 배열의 마지막 요소를 삭제하고, 삭제된 값을 리턴합니다. Output: 2. slice()를 이용한 방법 slice(start, end)는 start Index에서 end Index 이전 요소까지 잘라서 리턴합니다. 음수도 허용되며, -1은 배열의 마지막 요소의 Index를 가리킵니다. : 첫번째 요소부터, 배열의 마지막 요소 이전까지 잘라서 리턴 는 원본 배열을 변경하지 않고, 새로운 배열을 생성하여 리턴 Output: 3. length를 이용한 방법 아래와 같이 배열의 length를 1 줄이면, 배열이 길이가 하나 줄어들고, 마지막 요소가 자동적으로 삭제됩니다. Output:

[Javascript] 숫자 왼쪽 0 제거하는 방법

숫자 앞에 있는 0을 제거하는 방법에 대해서 알아보겠습니다. 월/일을 표현할 때, 07월 04일 처럼 숫자 왼쪽에 0으로 채워진 경우가 있습니다. 왼쪽 0을 제거하는 방법을 소개합니다. 1. parseInt()를 이용한 방법 2. Number를 이용한 방법 3. 정규표현식을 이용한 방법 1. parseInt()를 이용한 방법 parseInt(str, 10)은 str을 10진수로 파싱합니다. 결과 값은 number 타입으로 리턴되며, 문자열로 다시 변환하려면 을 사용하면 됩니다. Output: 2. Number를 이용한 방법 는 문자열을 숫자로 변환합니다. 이 과정에서 숫자 앞의 0이 제거되어 number 타입으로 변환됩니다. 문자열로 다시 변환하려면 을 사용하면 됩니다. Output: 3. 정규표현식을 이용한 방법 와 정규표현식으로 0을 ""으로 변환하여 제거할 수 있습니다. 패턴은 문자열 처음부터 0으로 시작하는 1개 이상의 문자들을 의미 예제에서 패턴과 일치하는 문자열은 “0…

[Javascript] 문자열에서 특수문자, 한글만 제거

문자열에서 특수문자, 한글만 제거하는 방법에 대해서 알아보겠습니다. 또는, 특수문자와 한글 모두 제거하는 방법도 알아보겠습니다. 1. 문자열에서 특수문자만 제거 2. 문자열에서 한글만 제거 3. 문자열에서 한글과 특수문자 모두 제거 1. 문자열에서 특수문자만 제거 은 문자열에서 패턴에 일치하는 문자열을 찾고 repl로 교체합니다. : 특수문자에 대한 정규표현식 : 는 패턴과 일치하는 모든 문자열을 찾으라는 의미 : 특수문자를 모두 찾아서 ""으로 변경하여 제거 아래와 같이 문자열에서 특수문자만 제거합니다. Output: 2. 문자열에서 한글만 제거 으로 한글만 제거할 수 있습니다. 아래 처럼 한글에 대한 패턴을 만들고, 한글을 찾아 제거합니다. : 한글에 대한 정규표현식 : 는 패턴과 일치하는 모든 문자열을 찾으라는 의미 : 한글을 모두 찾아서 ""으로 변경하여 제거 Output: 3. 문자열에서 한글과 특수문자 모두 제거 한글과 특수문자의 패턴을 함께 사용하여 모두 제…

[Javascript] 특정 문자 모두 제거, 3가지 방법

문자열에서 특정 문자를 모두 제거하는 방법을 소개합니다. 예를 들어, 문자열에서 어떤 특수문자를 모두 제거하거나, 숫자나 어떤 문자를 모두 제거해야하는 경우가 있을 수 있습니다. 예제를 통해 알아보겠습니다. 1. replace()를 이용한 방법 2. 정규표현식을 이용한 방법 3. for문을 이용한 방법 1. replace()를 이용한 방법 replaceAll(str, repl)은 문자열에서 str을 모두 repl로 변경합니다. 이것을 이용하여, 아래 예제처럼 특정 문자를 빈 문자열 로 모두 변환하여 제거할 수 있습니다. Output: str.replace(str, repl)은 문자열에서 가장 먼저 찾은 str을 repl로 1회만 변경합니다. 모든 문자를 변경하려면 replaceAll()을 사용해야 합니다. 2. 정규표현식을 이용한 방법 은 정규식 패턴에 일치하는 문자열을 찾고, repl로 변환합니다. 이것을 이용하여, 아래와 같이 특정 문자를 모두 찾는 정규식 패턴을 만들고, 로 …

[Javascript] 특정 위치 문자 치환, 3가지 방법

문자열에서 특정 Index의 문자를 다른 문자로 변경하는 방법에 대해서 알아보겠습니다. 1. substring()으로 특정 위치 문자 변경 substring(start, end)은 문자열에서 start Index를 포함하고 end Index를 포함하지 않는 범위의 문자열을 잘라서 리턴합니다. 이것을 이용하여, 아래와 같이 특정 Index의 문자만 제외하고 두개의 문자열로 분리하고, 다른 문자를 포함하여 두개의 문자열을 연결합니다. 그럼 특정 Index의 문자를 다른 문자로 교체할 수 있습니다. Output: 2. 배열을 이용하여 특정 위치 문자 변경 문자열을 배열로 변경하고, 특정 Index의 문자를 다른 문자로 변경할 수 있습니다. 그 이후에 문자열 배열을 을 이용하여 하나의 문자열로 연결할 수 있습니다. : charArray의 요소들을 하나의 문자열로 연결하며, 각 문자 사이에 문자를 추가 (즉, 아무 문자도 추가하지 않고 단순히 연결함) Output: 3. 정규표현식으로 …

[Javascript] 일정 시간 후 함수 실행, 3가지 방법

일정 시간 후에 특정 함수나 코드를 실행하는 방법에 대해서 알아보겠습니다. 또한, 일정 시간 간격으로 주기적으로 함수를 호출하는 방법에 대해서 알아보겠습니다. 1. setTimeout() : 일정 시간 후에 함수 실행 2. setInterval() : 주기적으로 함수 실행 3. 비동기 작업에서 일정 시간 후에 함수 호출 1. setTimeout() : 일정 시간 후에 함수 실행 은 일정 시간 time(millisecond) 후에 함수를 실행합니다. 아래 예제는 2초 뒤에 함수를 실행합니다. Output: 2. setInterval() : 주기적으로 함수 실행 은 일정 시간(time, millisecond) 간격으로 함수를 실행합니다. time 뒤에 함수가 처음 실행되며, time 시간 간격마다 주기적으로 함수 실행됨 아래 예제는 1초 간격으로 특정 함수를 실행하는 예제입니다. Output: 3. 비동기 작업에서 일정 시간 후에 함수 호출 비동기 작업에서는 async, await,…

[Javascript] sleep, delay 함수 구현

자바스크립트에는 sleep이나 delay 함수가 제공되고 있지 않습니다. 만약 필요하다면, 직접 구현해서 사용해야 합니다. 이 글에서는 동기적인, 비동기적인 sleep 함수를 구현하는 방법에 대해서 알아보겠습니다. 1. sleep 함수 구현 (Sync) 2. sleep 함수 구현 (Async) 1. sleep 함수 구현 (Sync) while과 Date를 사용하여, 동기적으로 sleep을 구현할 수 있습니다. 로 시간 정보를 가져오고, 지연시켜야 하는 시간 동안 while문에서 멈춰있도록 합니다. 일정 시간이 지나면 while을 탈출하여 다음 코드가 실행되도록 합니다. Output: 2. sleep 함수 구현 (Async) Promise와 setTimeout을 사용하여 다음과 같이 비동기적으로 sleep을 구현할 수 있습니다. Output: 또는, 아래와 같이 async 함수에서 await 키워드와 함께 사용할 수 있습니다.

[Javascript] 숫자 배열 정렬 (오름차순, 내림차순)

를 사용하여 숫자 배열을 오름차순, 내림차순으로 정렬하는 방법에 대해서 알아보겠습니다. sort()는 기본적으로 문자열로 변환하여 비교하기 때문에, 숫자 배열의 경우 의도한 것과 다르게 동작할 수 있습니다. 1. 오름차순 정렬 2. 내림차순 정렬 1. 오름차순 정렬 sort()는 배열의 요소들을 문자열로 변환하며, 오름차순으로 정렬합니다. 따라서 숫자 배열을 정렬할 때는 를 사용하면 안되고, 인자로 정렬 규칙을 함수로 전달해야 합니다. 아래 예제와 같이 sort()에 숫자를 오름차순으로 비교하는 함수를 구현하여 전달하였습니다. Output: 위 코드는 화살표 함수를 사용하여, 다음과 같이 간단히 구현할 수 있습니다. 2. 내림차순 정렬 오름차순과 비슷한 방식으로, 내림차순에 대한 정렬 규칙 함수를 구현하여 에 전달해야 합니다. 아래 예제에서는 오름차순과 반대로 비교하도록 구현하여 내림차순 정렬하였습니다. Output: 위의 예제는 화살표 함수를 사용하여 아래와 같이 간단히 구현할 …

[Javascript] 객체 배열 정렬 (오름차순, 내림차순)

객체를 요소로 갖고 있는 배열을 오름차순, 내림차순으로 정렬하는 방법에 대해서 알아보겠습니다. 문자열 배열이나, 숫자 배열은 각 요소 값들로 비교하여 정렬하면 되는데, 객체 배열은 객체가 다양한 값을 갖고 있기 때문에, 특정 값을 기준으로 정렬해야 합니다. 다른 배열 정렬 방법에 대해서 궁금하시다면, 문자열 배열 정렬과 숫자 배열 정렬을 참고해주세요. 1. 오름차순 정렬 2. 내림차순 정렬 1. 오름차순 정렬 아래 예제는 name과 score 값을 갖고 있는 객체 배열을 오름차순으로 정렬합니다. 먼저 score 속성을 기준으로 정렬하고, 그 다음에 name 속성으로 정렬합니다. sort() 함수에는 객체 값을 비교하는 comparator 함수를 전달해야 함 숫자 값들은 처럼 값의 차를 리턴하여 비교 정렬 문자열 값들은 으로 비교 정렬 Output: 화살표 함수로 구현 화살표 함수를 사용하여 아래와 같이 간단히 구현할 수 있습니다. 2. 내림차순 정렬 내림차순으로 정렬하려면, 에 …

[Javascript] 문자열 배열 정렬 (오름차순, 내림차순)

를 사용하여 문자열 배열을 오름차순, 내림차순으로 정렬하는 방법에 대해서 알아보겠습니다. 1. 오름차순 정렬 2. 내림차순 정렬 1. 오름차순 정렬 문자열 배열에 대해서 sort()를 호출하면 배열의 요소들이 오름차순으로 정렬됩니다. Output: 영어, 숫자 문자열 배열 정렬 한글 뿐만 아니라, 영어/숫자로 된 문자열의 경우도 오름차순으로 정렬됩니다. Output: 2. 내림차순 정렬 는 배열의 요소를 함수의 비교 결과로 정렬합니다. 기본적으로 는 오름차순으로 비교하는 함수로 동작하고 있어서 함수를 생략할 수 있었습니다. 만약 내림차순으로 정렬하려면, 내림차순으로 비교하는 함수를 구현해줘야 합니다. 아래 예제에서는 로 함수를 만들었고, 오름차순과 반대로 비교하도록 순서를 변경하였습니다. 오름차순의 경우는 로 비교해야 함 Output: 영어, 숫자 문자열 배열 정렬 영어, 숫자 문자열 배열도 동일한 방식으로 내림차순 정렬할 수 있습니다. Output:

[Javascript] 특정 문자열로 시작하는지 확인, startsWith()

어떤 문자열이 특정 문자열로 끝나는지 확인할 때 사용할 수 있는 방법을 알아보겠습니다. 많은 문자열들을 비교할 때, 특정 문자열로 시작하는 문자열에 대해서만 어떤 작업을 수행할 때 이런 방법들을 사용할 수 있습니다. 1. startsWith()를 이용한 방법 2. 정규표현식을 이용한 방법 1. startsWith()를 이용한 방법 str.startsWith(prefix)는 str이 prefix로 시작할 때 true를 리턴하며, 그렇지 않으면 false를 리턴합니다. 이 함수를 이용하여, 아래와 같이 구현할 수 있습니다. Output: 2. 정규표현식을 이용한 방법 은 문자열이 정규표현식 패턴에 해당할 때 true, 그렇지 않으면 false를 리턴합니다. 아래 예제에서 패턴은 이며, 는 문자열의 시작을 의미하는 정규식 는 prefix로 시작하는 문자열을 의미 : 패턴을 갖고 있는 RegExp 객체 생성 : str이 prefix로 시작하는 문자열일 때 true 리턴 Output:

[Javascript] string to int, 3가지 방법

string을 int(number) 타입으로 변환하는 다양한 방법에 대해서 알아보겠습니다. 1. parseInt()로 문자열을 숫자로 변환 2. Number 생성자로 문자열을 숫자로 변환 3. Unary plus(+) 연산자로 문자열을 숫자로 변환 1. parseInt()로 문자열을 숫자로 변환 parseInt(str)은 str을 number 타입으로 변환하여 리턴합니다. 아래와 같이 문자열을 Integer로 변환할 수 있습니다. Output: 2. Number 생성자로 문자열을 숫자로 변환 Number 생성자에 인자로 문자열을 전달하면, 문자열이 파싱되면서 number 타입 숫자가 생성됩니다. 아래와 같이 변환할 수 있습니다. Output: 3. Unary plus(+) 연산자로 문자열을 숫자로 변환 문자열로 된 숫자 앞에 를 추가하면 문자열이 number 타입으로 변경됩니다. 아래와 같이 변환할 수 있습니다. Output:

[디자인패턴] 전략 패턴 (Strategy Pattern)

전략 패턴(Strategy Pattern)은 알고리즘을 캡슐화하여, 동적으로 알고리즘을 교체 가능하도록 하는 디자인 패턴입니다. 예를 들어, 결제 방법이 여러가지가 있다고 가정하면, 상황에 따라서 어쩔 때는 카드로 결제하고, 어쩔 때는 현금으로 결제할 수 있는데요. 다양한 결제 방법을 객체들로 만들고, 결제를 처리하는 곳에서 결제 방법을 동적으로 교체하여 어떤 알고리즘을 수행시킬 수 있습니다. 따라서, 어떤 작업을 수행할 때 다양한 알고리즘이 존재하며 상황에 따라 특정 알고리즘을 사용하여 처리해야한다면 전략 패턴이 사용될 수 있습니다. 전략 패턴 전략 패턴은 다음과 같습니다. 다양한 알고리즘(family 알고리즘 - 비슷한 목적으로 사용되는)을 정의 각각의 알고리즘을 캡슐화 각각의 알고리즘을 동적으로 변경하여 수행시킬 수 있음 클래스 다이어그램을 보면, Strategy(알고리즘)를 추상화하고 상속을 통해 알고리즘을 구현합니다. 즉, 상속을 통해 확장을 합니다. 전략 패턴 특징 유…

[Javascript] 특정 문자열로 끝나는지 확인, endsWith()

어떤 문자열이 특정 문자열로 끝나는지 확인할 때 사용할 수 있는 방법을 알아보겠습니다. 1. endsWith()를 이용한 방법 2. 정규표현식을 이용한 방법 1. endsWith()를 이용한 방법 str.endsWith(suffix)는 str이 suffix로 끝날 때 true를 리턴하며, 그렇지 않으면 false를 리턴합니다. 이 함수를 이용하여, 아래와 같이 구현할 수 있습니다. Output: 2. 정규표현식을 이용한 방법 은 문자열이 정규표현식 패턴에 해당할 때 true, 그렇지 않으면 false를 리턴합니다. 아래 예제에서 패턴은 이며, 는 문자열의 끝을 의미 는 suffix로 끝나는 문자열을 의미 : 패턴을 갖고 있는 RegExp 객체 생성 : str이 suffix로 끝나는 문자열일 때 true 리턴 Output:

[Javascript] 현재 날짜/시간 항상 한국 시간으로 가져오기

Javascript에서 현재 시간을 가져올 때, 시스템 설정과 관계 없이 항상 한국 시간으로 가져오는 방법에 대해서 알아보겠습니다. 1. 시스템에 설정된 현재 시간/날짜 가져오기 2. 항상 현재 한국 시간/날짜 가져오기 1. 시스템에 설정된 현재 시간/날짜 가져오기 는 시간/날짜 정보를 갖고 있으며, 시스템에 설정된 지역의 시간 기준으로 출력됩니다. 으로 Date를 출력하면 시스템 설정 시간 기준으로 출력 get 함수로 가져온 년/월/일, 시/분/초 정보는 시스템 설정 지역의 시간으로 출력 로 Date를 출력하면 UTC 시간이 출력됨 아래와 같이 Date 객체에서 날짜, 시간 정보를 읽을 수 있습니다. Output: 2. 항상 현재 한국 시간/날짜 가져오기 시스템 설정과 무관하게, 항상 한국의 현재 시간/날짜 정보를 가져오려면, Date에서 UTC 시간을 계산하고, UTC에서 한국의 시간차(9시간)를 더한 Date 객체를 만들면 됩니다. UTC가 영국 기준이고, 한국은 UTC + …

[Javascript] 문자열에서 숫자만 추출

다양한 방법으로 문자열에서 숫자만 추출할 수 있습니다. 예제와 함께 알아보겠습니다. 1. 정규표현식으로 숫자 추출 2. filter()로 숫자 추출 3. for문으로 숫자 추출 1. 정규표현식으로 숫자 추출 은 문자열에서 패턴에 일치하는 문자열을 찾고 repl로 교체합니다. : 숫자가 아닌 문자로, 와 동일한 의미의 정규식 : 숫자가 아닌 문자를 ""으로 대체하여 제거 아래와 같이 문자열에서 숫자가 아닌 문자를 제거하여, 숫자만 추출할 수 있습니다. Output: 2. filter()로 숫자 추출 는 문자열을 문자 단위로 분리하며, 각 문자 별로 를 수행합니다. 함수의 결과가 true인 문자들만 모아서 으로 연결합니다. isNaN(char) : is Not a Number의 의미로, 문자 char가 숫자로 변환 가능한 경우 true를 리턴 : char가 숫자인 경우만 모아서 배열로 리턴 아래와 같이 문자열에서 숫자만 추출할 수 있습니다. Output: 3. for문으로 숫자 …

[Javascript] 함수 실행 시간 측정, 3가지 방법

함수의 수행 시간이 얼마나 걸렸는지, 시간을 측정하는 방법을 소개합니다. 어떤 기능을 구현했을 때, 성능이 어떤지, 이전보다 개선이 되었는지 느려졌는지 확인해보기 위해 함수의 실행 시간을 측정해볼 때가 있습니다. 1. console.time()을 이용한 방법 2. performance.now()를 이용한 방법 3. Date를 이용한 방법 1. console.time()을 이용한 방법 console.time()을 호출하면 측정 시작 시간을 기록하고, console.timeEnd()을 호출하면 종료 시간을 기록하고, 그 차이를 로그로 출력합니다. 아래와 같이 어떤 함수의 시작과 끝에 time(), timeEnd()를 호출하여 실행 시간을 측정할 수 있습니다. Output: 2. performance.now()를 이용한 방법 는 코드의 성능을 측정할 때 사용되며, 더 정확한 시간 정보를 제공합니다. 시간 단위는 ms입니다. 또한, 처럼 결과를 로그로 출력하지 않고, 함수가 호출될 때의…

[Javascript] 배열 합치기, 중복 제거

두 배열을 합치면서 중복 요소는 모두 제거하는 방법에 대해서 알아보겠습니다. 배열을 합치면 중복 요소들도 함께 포함되는데, 합친 이후에 중복 값을 따로 제거해야 합니다. 두 배열을 합치는 방법에 대해서 먼저 알아보고, 그 이후에 중복 값을 제거하는 방법을 알아보겠습니다. 1. 두 배열을 합치는 방법 (중복 값 제거 안됨) 2. Set로 배열 합치면서 중복 제거 3. filter()로 배열 합치면서 중복 제거 4. reduce()로 배열 합치면서 중복 제거 1. 두 배열을 합치는 방법 (중복 값 제거 안됨) concat(), 전개 연산자와 push를 사용하여 두 배열을 합칠 수 있습니다. : a 배열과 b 배열의 모든 요소를 하나의 배열로 합치고 배열 리턴 : array1과 array2의 모든 요소들을 새로운 배열에 추가 : mergedArray 배열에 array1의 모든 요소 값을 추가 Output: 2. Set로 배열 합치면서 중복 제거 Set는 중복 요소를 허용하지 않는 …

[Javascript] 숫자 앞에 0으로 채우기

숫자 앞에 자리수 만큼 0을 추가하는 방법에 대해서 알아보겠습니다. 날짜 월 또는 일을 표현할 때, 07월 처럼 특정 자리수만큼 0을 채워야할 때가 있는데요. 이럴 때 어떻게 구현하는지 알아보겠습니다. 1. padStart()를 이용한 방법 2. repeat()을 이용한 방법 3. 숫자 뒤, 특정 자리수만큼 0 채우기 1. padStart()를 이용한 방법 padStart(N, “0”)은 문자열 N자리에서 비어있는 부분을 “0”으로 채웁니다. 만약 0 대신에 다른 값으로 채워야 한다면, 그 문자를 0 대신에 입력하시면 됩니다. Output: 날짜를 예로 들면, 아래와 같이 0을 채워서 두자리로 월/일을 표현할 수 있습니다. Output: 2. repeat()을 이용한 방법 str.repeat(n)은 str을 n회 반복하는 문자열을 만듭니다. 이렇게 0을 반복하는 문자열을 만들고 숫자를 합친 뒤에, slice()로 필요한 자리수만큼 자르면 됩니다. 은 문자열 뒤에서 n개만 잘라서 문…

[Javascript] Stacktrace, Callstack 출력 방법

현재 위치까지 어떤 경로로 함수가 호출되었는지 확인할 때 Stacktrace를 출력하여 디버깅을 할 수 있습니다. 기본적으로 로 디버깅을 할 수 있지만, stack trace 정보를 출력하진 않습니다. Stack trace를 출력하는 방법에 대해서 알아보겠습니다. 1. console.trace()를 이용한 방법 2. console.error()를 이용한 방법 1. console.trace()를 이용한 방법 는 메시지와 함께 호출 시점의 call stack을 출력합니다. 아래와 같은 함수 호출 구조에서 trace를 출력해보면 다음과 같이 콜스택이 출력되어, 어떤 함수에서 호출되었는지 확인할 수 있습니다. Output: 2. console.error()를 이용한 방법 는 msg와 함께 error를 출력합니다. error에는 콜스택 정보를 갖고 있어, 출력 시 stacktrace를 출력할 수 있습니다. 도 동일하게 스택 트레이스가 출력됨 Output:

[Kotlin] 특정 날짜의 요일 구하기

코틀린에서 어떤 날짜가 무슨 요일인지 확인하는 방법에 대해서 알아보겠습니다. 1. LocalDate를 이용한 방법 2. Calendar를 이용한 방법 1. LocalDate를 이용한 방법 문자열로 된 날짜가 있을 때 와 를 이용하여 특정 날짜를 파싱할 수 있습니다. 어떤 날짜에 대한 LocalDate 객체를 생성하면, LocalDate의 dayOfWeek 값으로 요일 정보를 알 수 있습니다. Output: 2. Calendar를 이용한 방법 Calendar를 이용하여 요일 정보를 얻을 수도 있습니다. 문자열로 된 날짜를 파싱하여 Date 객체를 생성하고, Calendar의 시간대를 특정 시간대로 변경합니다. 마지막으로 Calendar의 요일 정보를 얻습니다. : 날짜의 요일 정보를 얻음, 요일 정보는 1(일요일)에서 7(토요일)까지의 숫자 범위로 되어있음 문자열로 요일을 출력하고 싶다면, 1에서 7의 값이 매핑된 요일 리스트를 만들고, 숫자를 문자열로 변경할 수 있음 Output:

[Kotlin] 한국 시간 가져오기

시스템 설정에 따라서 다른 지역의 시간을 가져올 수 있는데, 지역과 무관하게 항상 한국 시간을 가져오는 방법에 대해서 알아보겠습니다. 1. LocalDateTime을 이용한 방법 2. Calendar를 이용한 방법 1. LocalDateTime을 이용한 방법 Java에서 제공하는 time 라이브러리를 사용하여 한국 시간을 가져올 수 있습니다. 아래와 같이 한국 시간대의 ZoneId로 현지 시간을 가져올 수 있습니다. : 한국 시간대 (Asia/Seoul)의 시간을 가져옴 : TimeZone에 맞는 LocalDateTime을 가져옴 Output: 2. Calendar를 이용한 방법 한국 시간대의 TimeZone을 가져오고, Calendar를 한국 시간대로 변경하여 시간을 가져오면 한국 시간을 가져올 수 있습니다. calendar는 이제 잘 안쓰이기 때문에, LocalDateTime를 사용하여 시간을 가져오도록 구현하는 것이 좋습니다. : 한국 시간대의 TimeZone 가져옴 …

[Kotlin] 리스트 중복 값 제거

리스트가 갖고 있는 요소들 중에 중복 값을 찾아서 제거하는 방법에 대해서 알아보겠습니다. 리스트는 Set과 다르게 중복 값이 저장될 수 있습니다. 1. distinct()를 이용한 방법 2. Set를 이용한 방법 3. for문을 이용한 방법 1. distinct()를 이용한 방법 List.distinct()는 리스트에서 중복된 값을 제거하여, 유일한 값만 남도록 합니다. 아래와 같이 중복 값을 제거할 수 있습니다. Output: 2. Set를 이용한 방법 Set는 중복 값을 허용하지 않는 자료구조로, 중복 값을 추가해도 추가가 되지 않습니다. 이것을 이용하여 아래와 같이 리스트를 Set로 변경하고 다시 List로 변경하면, 이 과정에서 중복 요소가 삭제됩니다. Output: 3. for문을 이용한 방법 for문으로 루프를 돌면서, 중복된 값을 제외한 나머지 요소들로 새로운 리스트를 구성하는 방법이 있습니다. Output:

[Javascript] 특정 문자 위치 모두 찾기

문자열에서 특정 문자나 문자열의 위치(Index)를 찾는 방법에 대해서 알아보겠습니다. 보통 함수는 1개의 문자 위치만 찾지만, 반복문을 이용하여 모두 찾도록 구현할 수도 있습니다. Index를 사용하여 특정 문자열을 자르거나, 문자열이 포함되어있는지 확인할 때 이런 방법을 사용할 수 있습니다. 1. indexOf()를 이용한 방법 2. lastIndexOf()를 이용한 방법 3. 정규표현식을 이용한 방법 4. 특정 문자 모두 찾기 1. indexOf()를 이용한 방법 indexOf() 함수를 사용하여 문자열에서 특정 문자열의 첫 번째 위치를 찾을 수 있습니다. 해당 문자열이 없으면 -1을 리턴합니다. 특정 문자열이 2개가 존재해도, 문자열 왼쪽부터 가장 먼저 찾은 문자열의 Index를 리턴합니다. Output: 2. lastIndexOf()를 이용한 방법 는 와 동일하지만, 특정 문자열을 찾는 방향이 반대입니다. 이 함수는 문자열의 끝에서 시작 방향으로 문자열을 찾으며, 특정 문…

[Javascript] 객체 value 값으로 key 값 찾기

key-value를 갖고 있는 객체에서 value 값으로 key 값을 찾는 방법을 알아보겠습니다. key로 value를 찾기는 쉽지만, 그 반대는 직접 찾는 코드를 구현해야 합니다. 1. find()를 이용한 방법 2. for문을 이용한 방법 1. find()를 이용한 방법 아래와 같이 객체의 모든 value 값을 순회하면서, 특정 value 값을 찾고, 그 객체의 key를 리턴하도록 구현할 수 있습니다. : myObject에서 value로 “c” 값을 갖고 있는 key 리턴 : 객체에서 key 값들만 배열로 리턴 : keys의 key 값들을 모두 순회하면서, find()의 함수의 결과가 true일 때, 그 key를 리턴 Output: 2. for문을 이용한 방법 를 사용하는 방법과 동일한데, 대신 find를 사용하지 않고 for문으로 동일하게 동작하도록 구현하였습니다. Output:

[Javascript] 두 배열 중복 찾기

두개의 배열이 공통적으로 갖고 있는 중복 값을 찾는 방법에 대해서 알아보겠습니다. 집합으로 얘기하면, 두 배열의 교집합이 됩니다. 1. filter()를 이용한 방법 2. for문을 이용한 방법 3. 두 배열의 중복 값 제거 1. filter()를 이용한 방법 는 array의 모든 요소에 대해서 함수를 수행하며, 함수의 결과가 true인 요소들만 배열에 담아 리턴합니다. 아래와 같이 두 배열의 중복 값을 찾을 수 있습니다. : arr1이 갖고 있는 요소가 arr2에도 있는 요소들만 배열로 리턴 Output: 2. for문을 이용한 방법 는 배열에 value가 있을 때 true를 리턴합니다. 이것을 이용하여 아래와 같이 두개의 배열을 for문으로 순회하면서, 어떤 요소에 대해서 두개의 배열이 함께 갖고 있는지 확인할 수 있습니다. 중복 값은 배열에 저장하고, 이 배열을 리턴하여 중복 값을 찾을 수 있습니다. Output: 3. 두 배열의 중복 값 제거 아래와 같이 filter()를…

[Javascript] 숫자 천단위마다 콤마 추가

숫자가 클 때, 3자리마다 콤마를 넣으면 읽기가 편해집니다. 천단위(숫자 3자리)마다 comma(,)를 추가하여 숫자를 문자열로 변환하는 방법에 대해서 알아보겠습니다. 1. toLocaleString()을 이용한 방법 2. 정규표현식을 이용한 방법 1. toLocaleString()을 이용한 방법 는 숫자를 현재 설정된 지역의 형식에 맞게 문자열로 변환합니다. 즉, 그 지역에서 숫자 3자리마다 콤마를 넣으면 그 형식으로 숫자를 변경합니다. : number를 시스템에서 설정된 지역의 숫자 형식으로 변환 : number를 한국(ko-KR)의 숫자 형식으로 변환 Output: 2. 정규표현식을 이용한 방법 정규표현식을 사용하여 숫자 3자리마다 콤마를 넣을 수 있습니다. 아래 예제에서 사용된 정규식의 의미는 다음과 같습니다. : 단어의 경계를 찾음 : 숫자 3개 : 숫자 3개 패턴이 1개 이상 반복 : 단어의 경계 뒤에 숫자 3개 패턴이 있는 경우를 찾음 : 숫자가 오지 않는…

[Javascript] 문자열 사이에 문자열 추가

어떤 문자열의 중간에 특정 문자를 넣거나, 문자열을 추가하는 방법에 대해서 알아보겠습니다. 예를 들어, 아래와 같이 “Hello World” 문자열의 중간에 를 추가하여 “Hello, World”로 만들 수 있습니다. 1. slice()를 이용한 방법 2. substring()을 이용한 방법 3. slice()와 substring()의 차이점 1. slice()를 이용한 방법 slice(start, end)는 문자열에서 start Index를 포함하고 end Index를 포함하지 않는 범위의 문자열을 잘라서 리턴합니다. 는 start Index에서 문자열 끝까지 잘라서 리턴 이것을 이용하여, 어떤 문자열을 특정 Index를 기준으로 두개의 문자열로 나누고, 중간에 특정 문자나 문자열을 추가할 수 있습니다. Output: 2. substring()을 이용한 방법 substring()도 slice()와 비슷하며, 아래와 같이 동작합니다. : start Index를 포함하고 end를 …

[Javascript] 두 배열이 같은지 비교하는 방법

두개의 배열이 같은 값을 갖고 있는지 비교하는 방법에 대해서 알아보겠습니다. 배열의 동등 비교를 할 때 다음 두가지를 고려하여 비교할 수 있습니다. 두 배열이 서로 같은 값을 갖고 있지만, 저장 순서는 다를 때 두 배열이 서로 같은 값을 갖고 있고, 저장 순서도 같음 1. for문으로 두 배열의 값과 순서를 모두 비교 2. Array.every()로 두 배열의 값과 순서를 모두 비교 3. Array.every()로 두 배열의 값만 비교 1. for문으로 두 배열의 값과 순서를 모두 비교 for문으로 두 배열을 순회하면서, 동일한 순서(Index)로 저장되고, 같은 값을 갖고 있는지 확인할 수 있습니다. for문으로 Index와 값을 모두 비교하는게 직관적이고, 정석적인 방법이지만 비교하는 코드가 좀 길 수 있습니다. Output: toString()과 === 연산자로 비교 문자열이나, 숫자 배열의 경우 값이 배열 값의 내용을 문자열로 변환하여 리턴합니다. 이런 경우 연산자로 문…

[Javascript] 문자열이 숫자인지 체크 (isNaN, 정규표현식)

어떤 문자열이 숫자인지(숫자로 변환 가능한지) 체크하는 방법에 대해서 알아보겠습니다. 간혹 숫자가 문자열로 되어있는 경우, 연산이 안되기 때문에 number 타입으로 변환해야 하는데요, 문자열이 숫자인지 체크하는 방법을 소개합니다. 1. isNaN()을 이용한 방법 2. 정규표현식을 이용한 방법 3. 문자열이 숫자일 때, number 타입으로 변환 1. isNaN()을 이용한 방법 isNaN(str)은 str이 숫자로 변환할 수 없을 때 true를 리턴합니다. NaN은 Not a Number(숫자가 아님)를 의미합니다. Output: 다양한 케이스 을 사용하여 숫자로 구분할 수 있는 케이스는 아래와 같습니다. true를 리턴하는 경우는 배열, “NaN”, 문자열 등이며, 그 외의 경우는 대부분 false를 리턴합니다. 2. 정규표현식을 이용한 방법 정규표현식으로 문자열이 숫자인지 확인할 수 있습니다. 은 str이 pattern 조건에 해당한다면 true 리턴 패턴 는 문자열 시작부…

[Javascript] 배열을 문자열로 변환하기

배열의 모든 요소들을 하나의 문자열로 변환하는 방법에 대해서 알아보겠습니다. 배열의 내용을 화면에 출력하거나 저장할 때, 문자열 변환이 필요할 때가 있습니다. 1. join()을 이용한 방법 2. toString()을 이용한 방법 3. JSON.stringify()를 이용한 방법 1. join()을 이용한 방법 array.join(str)은 배열 array의 모든 요소를 하나의 문자열로 합치며, 각 요소 사이에 str이 추가됩니다. 아래 예제는 요소들이 쉼표나 공백으로 구분된 문자열을 만듭니다. Output: 2. toString()을 이용한 방법 은 배열의 요소를 문자열로 변환하며, 각 요소는 쉼표로 구분됩니다. 으로 만든 문자열과 다르게, 의 경우 쉼표와 다음 요소 사이에 스페이스는 없습니다. Output: 3. JSON.stringify()를 이용한 방법 는 배열을 JSON의 문자열로 변환합니다. 각각의 요소는 쉼표로 구분되어있고, 시작과 끝에 가 추가됩니다. Output: …

[Javascript] 두 문자열 일치 여부 확인

두 문자열이 같은지, 일치 여부를 확인하는 방법에 대해서 알아보겠습니다. 문자열 동등 비교는 자주 하는데, 연산자 를 사용해야하는지 를 사용해야하는지 헷갈릴 때가 많습니다. 예제와 함께 알아보겠습니다. 1. === 연산자를 이용한 방법 2. == 연산자를 이용한 방법 3. localeCompare()를 이용한 방법 1. === 연산자를 이용한 방법 연산자는 두개의 객체를 비교할 때, 값과 타입이 모두 일치하는 경우 true를 리턴하며 그렇지 않으면 false를 리턴합니다. 아래와 같이 두개의 문자열이 같은지 비교할 수 있으며, 값과 타입이 모두 일치해야 같다고 판단됩니다. Output: ===로 다른 타입 객체 비교 만약 아래와 같이, 숫자와 문자열을 비교할 때, 타입은 다르지만 타입을 변환했을 때 값이 같은 경우에는 는 false를 리턴합니다. Output: 2. == 연산자를 이용한 방법 연산자는 값만 비교하며, 타입이 달라도 같다고 판단할 수 있습니다. 이 연산자는 타입을…

[Javascript] 두 날짜 비교 방법

오늘 날짜, 또는 특정 날짜를 비교하여 어떤 날짜가 시간상 앞에 있는지 확인하는 방법을 알아보겠습니다. 1. 비교연산자를 이용한 방법 2. getTime()을 이용한 방법 3. 시간 비교 4. 오늘 날짜와 특정 날짜 비교 1. 비교연산자를 이용한 방법 비교 연산자(>, <, ==, >=, <=)로 두 날짜를 비교할 수 있습니다. 크기가 작다는 것은 시간상 과거라는 의미 크기가 크다는 것은 시간상 미래라는 의미 크기가 같으면 같은 날짜 Output: 2. getTime()을 이용한 방법 Date.getTime()은 날짜에 대한 timestamp 값을 리턴합니다. timestamp는 UTC 시간(1970년 1월 1일에서 현재까지 흐른 시간)을 millisecond로 표현한 것 입니다. 아래와 같이 timestamp를 출력하면 정수로 출력되며, 비교 연산자로 정수를 비교하면 됩니다. 정수의 크기가 큰 것이 시간상 미래가 됩니다. Output: 3. 시간 비교 는 날짜 정보와 시간 정보를…

[Javascript] 문자열 포함 여부 확인

문자열에서 특정 문자열이 포함되어있는지 확인하는 방법에 대해서 알아보겠습니다. 개발을 하다 보면, 어떤 문자열이 부분적으로 다른 문자열에 포함되어있는지 확인할 때가 많습니다. 예제와 함께 알아보겠습니다. 1. includes()를 이용한 방법 2. indexOf()를 이용한 방법 3. 정규표현식을 이용한 방법 1. includes()를 이용한 방법 a.includes(b)는 문자열 a에 b가 포함되어있을 때 true를 리턴합니다. 이것을 이용하여, 아래와 같이 어떤 문자열에 다른 문자열이 포함되어있는지 확인할 수 있습니다. Output: 2. indexOf()를 이용한 방법 a.indexOf(b)는 문자열 a에 b가 포함되어있을 때, b 문자열의 시작 Index를 리턴합니다. 만약 포함되어있지 않다면 -1을 리턴합니다. 이것을 이용하여, 아래와 같이 의 리턴 값이 -1이 아닐 때 특정 문자열이 포함되어있다고 판단할 수 있습니다. Output: 3. 정규표현식을 이용한 방법 patt…

[Javascript] 문자열 한글자씩 자르기

문자열이 갖고 있는 문자들을 한글자씩 잘라서 배열로 변환하는 방법입니다. 1. Spread operator를 이용한 방법 2. split()을 이용한 방법 3. Array.from()을 이용한 방법 4. for문을 이용한 방법 1. Spread operator를 이용한 방법 같은 형태를 전개 연산자(spread operator)라고 하며, 갖고 있는 요소들을 나열합니다. : 문자열 str가 갖고 있는 모든 문자들을 나열하여 배열에 저장 아래와 같이 spread operator를 사용하여 문자열을 한글자씩 잘라서 배열로 변환할 수 있습니다. Output: 2. split()을 이용한 방법 은 문자열 str을 각 문자 별로 나눠서 배열로 변환합니다. Output: 3. Array.from()을 이용한 방법 처럼 인자로 문자열을 전달하면, 배열을 생성할 때 문자열을 문자를 잘라서 각각 배열에 저장합니다. Output: 4. for문을 이용한 방법 아래와 같이 for문으로 문자열의 …

[Javascript] 문자열에서 특정 문자 개수 세기

문자열에서 어떤 문자가 몇개나 있는지 개수를 세는 방법에 대해서 알아보겠습니다. 1. split()을 이용한 방법 2. 정규표현식을 이용한 방법 3. 반복문을 이용한 방법 1. split()을 이용한 방법 split(str)은 문자열을 str을 기준으로 분리하며, 분리된 문자열을 배열에 담아 리턴합니다. 아래와 같이 을 사용하여 특정 문자열로 분리하면, 리턴된 배열의 길이는 특정 문자열의 개수보다 1개가 많습니다. 이것을 이용하여 개수를 구할 수 있습니다. : str에 substring의 개수 Output: 2. 정규표현식을 이용한 방법 str.match(pattern)은 문자열 str에 pattern에 해당하는 문자열이 있으면 찾은 결과를 배열로 리턴합니다. 아래 예제에서 패턴은 이며, Hello라는 문자열을 찾고, 는 정규식의 flags이며 일치하는 모든 값을 찾으라는 의미 는 str에서 모든 Hello 문자열을 찾음 matches를 출력해보면, Hello가 들어있는 배열이 …

[Javascript] 라디오버튼 체크된 값 가져오기

라디오버튼들이 있을 때, 선택된 라디오 버튼의 value와 텍스트를 가져오는 방법에 대해서 알아보겠습니다. 선택된 라디오 버튼 value 값 가져오기 선택된 라디오 버튼의 텍스트 가져오기 선택된 라디오 버튼 value 값 가져오기 선택된 라디오 버튼의 값을 화면에 출력하는 예제입니다. HTML 3개의 라디오 버튼이 있고, 그 아래에 버튼이 있습니다. 버튼을 누르면 Javascript 함수를 호출하고, 선택된 라디오 버튼을 찾아서 그 값을 화면에 출력합니다. Javascript 버튼에 대한 클릭 이벤트 리스너를 등록하여, 버튼이 클릭되면 함수가 실행됩니다. 로 체크된 라디오버튼을 찾고, 체크된 라디오 버튼이 있으면 그 값을 화면에 출력합니다. : 결과로 출력할 요소 찾기 : input 요소 중에 name이 radioGroup이고 선택(checked=true)된 요소를 찾습니다. : 선택된 라디오버튼의 value 선택된 라디오 버튼의 텍스트 가져오기 선택된 라디어 버튼()의 v…

[Javascript] select(콤보박스)의 선택한 Option 값 가져오기

콤보박스(select)에서 선택된 Option의 value와 text를 가져오는 방법에 대해서 알아보겠습니다. select에서 선택한 Option의 Value, Text 가져오기 select에서 선택한 Option의 Value, Text 가져오기 select에서 선택된 Option 값과 텍스트를 출력하는 예제입니다. HTML 로 콤보 박스를 추가하였고, 3개의 옵션을 추가하였습니다. 그리고 버튼을 추가하였고 클릭하면 select에 선택된 옵션 값과 텍스트를 가져와서 에 출력하려고 합니다. Javascript 버튼이 클릭되면 함수가 호출되며 선택된 옵션의 값과 텍스트가 출력됩니다. : 의 select 요소 가져옴 : select의 선택된 옵션의 value를 가져옴 : 선택된 옵션의 Index : 선택된 옵션의 텍스트를 가져옴

[Javascript] 테이블 생성/추가하기

Javascript를 사용하여 동적으로 테이블을 생성하고, 열을 추가하는 방법에 대해서 알아보겠습니다. 동적으로 테이블 생성하기 동적으로 테이블 생성하기 버튼을 누르면 동적으로 테이블을 생성하는 예제입니다. HTML 버튼을 누르면 함수를 실행하고, 함수에서는 동적으로 테이블을 생성하여 에 추가하려고 합니다. Javascript 버튼 클릭 이벤트를 받으면, 동적으로 테이블을 생성합니다. 동적으로 생성된 테이블의 HTML 코드를 보면 아래와 같이 보입니다. 아래에는 행을 의미하는 이 있고, 아래에는 Cell을 의미하는 가 있습니다. 그리고 헤더를 출력하고 싶으면, 하위의 첫번째 에 로 입력할 수 있습니다. 위 테이블은 아래의 Javascript 코드로 생성되는데, 코드를 보면, element를 만들고, , , element들을 만듭니다. 그리고 위에서 본 구조와 동일하게 요소들을 추가합니다. : element 객체 생성 : a 요소에 b 요소를 추가

[Javascript] input 박스에 영어만 입력할 수 있도록 설정

Javascript를 이용하여 에 영어만 입력 가능하도록 만드는 방법에 대해서 알아보겠습니다. 1. 문자 입력 시, 영어가 아닌 문자는 삭제 2. oninput을 이용하여 영어만 입력 1. 문자 입력 시, 영어가 아닌 문자는 삭제 문자를 입력할 때 영어가 아닌 문자는 삭제하여, 영어만 입력되도록 만드는 예제입니다. HTML input 박스가 있고, Javascript에서 input 이벤트를 받아서 영어만 허용하도록 구현하려고 합니다. Javascript input 박스의 요소를 가져와서 input에 대한 이벤트를 수신합니다. 그리고 input에 입력된 text를 가져와서 영어를 제외한 문제를 모두 제거합니다. 마지막으로 영어만 남은 문자열을 다시 input의 value에 입력합니다. : 입력 이벤트를 수신 : input 요소 가져오기 : input에 입력된 text 가져오기 : inputValue의 문자열을 정규표현식으로 영어가 아닌 문자열을 모두 찾고 으로 변환, 즉 영어…

[Javascript] 링크 새 창에서 열기, 현재 창에서 이동하기

링크를 클릭할 때 페이지를 새 창에서 열거나, 현재 창에서 여는 방법에 대해서 알아보겠습니다. 새창에서 열기, 현재 창에서 이동 새창에서 열기, 현재 창에서 이동 링크나 버튼을 클릭할 때 현재 창에서 URL로 이동하거나 새창에서 페이지를 실행시키는 예제입니다. HTML 링크()처럼, HTML에 으로 URL을 설정하면, 링크 클릭 시 현재 페이지에서 URL로 이동 버튼1과 버튼2는 Javascript 함수가 실행되도록 설정, 각 함수에서 현재 페이지에서 이동하거나 새창에서 이동하도록 구현 Javascript 버튼을 누르면, 함수에서 처럼 URL을 설정하며, 이렇게 구현하면 현재 창에서 페이지로 이동합니다. 는 현재 페이지의 주소를 의미하며, 이 값을 변경하면 변경된 URL로 이동합니다. 버튼을 누르면, 함수에서 를 호출하며, 이렇게 구현하면 새 창에서 페이지를 실행시킵니다. 은 인자로 URL을 받으며, 다른 인자도 받을 수 있습니다. URL만 전달하면 새 창으로 URL 페이지를…

[Javascript] 마우스 우클릭 금지, 차단 방법

Javascript를 이용하여 전체 화면 또는 특정 영역에서 마우스 우클릭을 못하도록 설정할 수 있습니다. 1. 페이지 전체에 우클릭 금지 2. 특정 요소에서 우클릭 방지 1. 페이지 전체에 우클릭 금지 우클릭을 하면 이벤트가 발생되는데, 아래와 같이 이 이벤트를 수신하여 를 호출하면 우클릭 이벤트가 동작하지 않도록 만들 수 있습니다. 화면 전체에 대한 우클릭 이벤트를 수신하기 때문에, 전체 화면에서 우클릭이 동작 안하게 됩니다. 2. 특정 요소에서 우클릭 방지 라는 텍스트만 우클릭이 안되고, 다른 영역은 우클릭이 동작합니다. HTML 아래와 같이 라는 요소가 있습니다. 이 요소에만 우클릭이 안되도록 만드려고 합니다. Javascript 아래와 같이 의 요소를 가져오고, 이 요소에 대해서만 이벤트를 수신하여 우클릭을 무시하도록 만들 수 있습니다. : myDiv 요소를 가져옴 : 요소에서 발생하는 contextmenu 이벤트만 수신하고, 로 동작 안되도록 만듬

[Javascript] 체크박스 전체 선택/해제 구현 방법

여러 체크박스가 있을 때, 모든 체크박스를 한번에 전체 선택/해제할 수 있는 체크박스를 구현하는 방법에 대해서 알아보겠습니다. 전체 선택/해제 체크박스 구현 전체 선택/해제 체크박스 구현 체크박스를 클릭할 때, 다른 체크박스들을 전체 선택하거나 해제하는 예제입니다. HTML 4개의 체크박스가 있습니다. 1개는 다른 체크박스들을 하는 체크박스이고, 3개는 일반적인 체크박스입니다. Javascript Javascript는 크게 두가지 구현이 있습니다. 체크박스를 클릭했을 때, 다른 체크박스들을 모두 선택/해제 체크박스가 체크되어있을 때, 다른 체크박스를 해제했을 때 체크박스의 체크 해제하기 코드를 보면, 요소와 다른 체크박스들을 모두 가져옵니다. 전체 선택이 클릭될 때 다른 체크박스를 해제하거나 체크되도록 하고 있습니다. : class가 checkbox인 모든 요소 찾기 : 전체 선택 체크박스가 클릭되었을 때, 현재 checked 값을 의미 : checkboxes는 다른 …

[Javascript] 테이블에 행(row) 추가, 삭제 방법

Javascript를 이용하여 Table에 행 1개를 추가하거나, 삭제하는 방법을 알아보겠습니다. 1. 행(row) 추가 2. 행(row) 삭제 1. 행(row) 추가 HTML 테이블이 있고, 2개의 버튼이 있습니다. 버튼을 누르면 각각의 Javascript 함수가 실행되며, 맨 앞에 행을 추가하거나, 맨 뒤에 행을 추가합니다. Javascript 아래 코드에서 는 맨 앞에 행을 추가하며 는 맨 뒤에 행을 추가합니다. : 테이블 요소 가져옴 : 는 테이블의 맨 앞에 행을 추가하며, 행의 요소가 리턴 : 1열의 셀을 추가하며 요소를 리턴, 리턴된 요소의 로 text를 입력할 수 있음. : 2열의 셀을 추가하며 요소를 리턴 2. 행(row) 삭제 HTML 테이블이 있으며, 두개의 버튼이 있습니다. 버튼을 누르면 각각의 Javascript 함수가 실행되며, 첫번째 행을 삭제하거나 마지막 행을 삭제합니다. Javascript 는 첫번째 행을 삭제하며, 는 마지막 행을 삭제합니다. …

[Javascript] 알림창 종류 (alert, confirm, prompt)

Javascript에서 사용자에게 메시지를 보여주는 알림창의 종류에는 alert, confirm, prompt가 있습니다. 각각 어떤 용도로 사용되는지 예제와 함께 알아보겠습니다. 1. alert 2. confirm 3. prompt 1. alert 은 사용자에게 메시지를 보여주는데 사용되며, 확인 버튼을 누르면 메시지가 사라집니다. HTML Javascript 2. confirm 은 사용자에게 메시지를 보여주고, 확인/취소 중에 하나를 누르도록 하고 결과를 받습니다. 확인을 누르면 true가 리턴되며, 취소를 누르면 false가 리턴됩니다. HTML 버튼을 누르면 confirm 메시지를 보여주고, 결과를 에 보여줍니다. Javascript 버튼에 리스너를 추가하여 클릭 시 함수가 실행됩니다. 는 confirm 메시지를 띄우고, 결과를 리턴 받음 결과에 따라서 에 text로 결과를 보여줌 3. prompt 은 사용자에게 메시지를 보여주고, 사용자가 입력한 값을 받을 수 있습니다. …

[Javascript] CapsLock 활성화 상태 확인 방법

네이버 같은 웹사이트에 로그인할 때, 특히 비밀번호를 입력할 때 CapsLock이 켜져있다는 알림을 받을 때가 있는데요. 키를 입력할 때 Caps Lock 버튼이 눌렸는지 안눌렸는지, Caps Lock의 활성화 상태를 확인하는 방법에 대해서 알아보겠습니다. getModifierState()로 CapsLock 상태 확인 getModifierState()로 CapsLock 상태 확인 키를 입력할 때 CapsLock의 활성화/비활성화 상태를 확인하는 예제입니다. HTML 텍스트 입력 박스가 있고, 아래에 Caps Lock의 상태를 출력하는 텍스트가 있습니다. Javascript input에 keyup 이벤트 리스너를 등록하여, 텍스트를 입력할 때 이벤트를 받도록 하였습니다. 키가 눌려 이벤트가 전달되면 함수로 Caps Lock이 눌렸는지 확인하고 화면에 상태를 업데이트합니다. : CapsLock 키의 활성화/비활성화 상태 리턴 : keyup 이벤트 발생 시, 함수 실행

[Javascript] 라디오 버튼의 텍스트 클릭해도 선택되도록 만들기

라디오 버튼을 클릭할 때, 꼭 라디오 버튼을 눌러야 선택이 되고, 옆에 텍스트를 클릭하면 선택이 안되는 불편함이 있습니다. 텍스트를 클랙해도 해당 라디오 버튼이 체크되도록 만드는 방법을 알아보겠습니다. 1. 라디오 버튼과 텍스트 중첩 2. label의 for를 이용한 방법 3. 텍스트 클릭 시, 라디오 버튼 체크 1. 라디오 버튼과 텍스트 중첩 아래 예제는 라디오 버튼 뿐만 아니라, 텍스트를 클릭해도 라디오 버튼이 체크됩니다. HTML 아래와 같이 요소 하위에 요소를 추가하면, 텍스트가 클릭되도 이 함께 클릭되어 라디오 버튼이 체크됩니다. 2. label의 for를 이용한 방법 아래 예제는 라디오 버튼 뿐만 아니라, 텍스트를 클릭해도 라디오 버튼이 체크됩니다. HTML 의 id와 의 for 값을 동일하게 맞춰주면, 텍스트를 클릭할 때 라디오 버튼도 함께 체크가 됩니다. 3. 텍스트 클릭 시, 라디오 버튼 체크 이미 label과 input이 중첩되어 텍스트만 클릭해도 라디오 버튼…

[Javascript] 마우스 Wheel, Scroll 이벤트 멈춤 감지

사용자가 마우스로 휠을 움직이거나, 스크롤을 하다가 멈췄을 때 감지하는 방법에 대해서 알아보겠습니다. 예를 들어, 페이지를 이동하지 않을 때, 어떤 팝업을 보여주거나 어떤 처리를 하고 싶을 때가 있습니다. 휠과 스크롤 이벤트가 전달되다가 멈췄을 때를 인지하는 방법을 소개합니다. 1. Scroll 이벤트 멈춤 감지 2. Wheel 이벤트 감지 1. Scroll 이벤트 멈춤 감지 스크롤을 하다가 멈추면, 스크롤 멈춤을 감지하여 팝업을 띄우는 예제입니다. HTML HTML은 아래와 같이 스크롤이 가능하도록 길게 만들었습니다. Javascript 으로 scroll 이벤트를 수신하고, 안에서 setTimeout을 사용하여 500ms간 이벤트가 오지 않는 것을 체크하여 스크롤 멈춤을 감지할 수 있습니다. : 스크롤 이벤트가 지속적으로 오면 scrollTimeout을 clear하여 setTimeout()의 함수가 실행되지 않도록 만듬 500ms간 이벤트가 오지 않으면 setTimeout의 …

[Javascript] 현재 페이지 URL 주소 가져오기

Javascript로 현재 실행 중인 페이지의 URL 주소를 가져오는 방법에 대해서 알아보겠습니다. window.location에서 URL 정보 가져오기 location 업데이트 window.location에서 URL 정보 가져오기 는 현재 페이지의 전체 주소를 갖고 있습니다. 이 값을 참조하여 현재 페이지의 URL 주소를 알 수 있습니다. Output: location의 다른 정보 아래와 같이 location 객체를 로그로 출력해보면, location이 갖고 있는 다양한 값들을 확인할 수 있습니다. Output: 아래와 같이 용도에 따라 각각의 변수에 접근하여 필요한 주소 정보를 얻을 수 있습니다. location 업데이트 현재 페이지를 다른 URL로 이동해야하는 경우, location을 업데이트하여 이동시킬 수 있습니다. 은 현재의 URL을 로 변경하고 현재 페이지가 변경됩니다.

[Javascript] 체크박스 선택된 값 모두 가져오기

Javascript에서 체크박스의 선택된 값을 모두 가져오는 방법에 대해서 알아보겠습니다. 체크박스에서 선택된 값 모두 가져오기 체크박스 선택 시, 선택된 값 출력 체크박스에서 선택된 값 모두 가져오기 HTML 3개의 체크박스가 있고, 그 아래에 버튼이 있습니다. 버튼을 누르면 Javascript에서 체크박스의 선택된 값을 가져와서 화면에 출력하려고 합니다. Javascript 버튼에 클릭 리스너를 등록하여, 버튼이 눌리면 함수가 실행됩니다. 함수에서는 모든 체크박스의 checked 값을 확인하고 체크되어있으면 리스트에 저장하여 화면에 출력합니다. : class가 checkbox인 모든 체크박스 요소 찾기 : id로 버튼 찾기 : id로 요소 찾기 체크박스 선택 시, 선택된 값 출력 체크박스를 선택할 때, 선택된 값을 화면에 출력하는 예제입니다. 이전에 선택된 값은 출력하지 않고, 방금 클릭된 체크박스의 값만 출력합니다. HTML 3개의 체크박스와 결과 출력을 위한 요소를…

[Shell Script] 파일 한줄씩 읽기

Shell script에서 텍스트(txt) 파일을 한 줄씩 읽는 방법에 대해서 알아보겠습니다. 1. read로 파일 한 줄씩 읽기 2. 전체 텍스트를 하나의 문자열에 할당 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. read로 파일 한 줄씩 읽기 텍스트 파일 예제로 사용될 라는 파일의 내용은 다음과 같습니다. 파일 한 줄씩 읽기 그리고, read를 사용하여 아래와 같이 한 줄씩 텍스트를 읽을 수 있습니다. : i는 라인 숫자 의미, line은 텍스트 한줄 : 파일에서 한줄을 읽어 line에 저장 : -n 옵션은 문자열이 비어있지 않은 경우에 true 리턴, 즉, EOF(End Of File)에 도달했을 때는 while문을 종료하는 목적 : 파일을 가져와서 while문에서 사용하겠다는 의미 Output: 2. 전체 텍스트를 하나의 문자열에 할당 을 사용하여 파일의 모든 텍스트를 하나의 문자열로 만들 수 있습니다. 아래 예제…

[Shell Script] 문자열 첫글자, 마지막 글자 제거

문자열에서 첫번째 문자, 마지막 문자를 제거하는 방법에 대해서 알아보겠습니다. 1. 첫번째 글자 제거 2. 마지막 글자 제거 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. 첫번째 글자 제거 slicing을 이용하여 아래 처럼 첫번째 문자를 제거할 수 있습니다. : Index 1에서 문자열 마지막까지 잘라서 리턴, 첫글자인 Index 0 문자만 제거됨 맨 앞의 문자 2개를 제거하려면 처럼 시작 Index 변경 Output: cut을 이용하여 첫글자 제거 : 문자열의 2번째 글자부터 끝까지 잘라서 리턴 앞의 문자 2개를 제거하려면 처럼 3번째 글자부터 마지막까지 자르도록 숫자 변경 Output: 2. 마지막 글자 제거 는 string 문자열에서 마지막 문자 아무거나 1개(?)를 제거합니다. 마지막 글자 2개를 제거하려면 처럼 ?를 두개 사용 Output: slicing을 이용한 방법 slicing을 이용하여 마지막 문자를 제거…

[Shell Script] sleep으로 일정 시간 멈추기

shell script에서 sleep을 사용하여 일정 시간 코드 실행을 지연시키는 방법에 대해서 알아보겠습니다. sleep으로 몇 초 대기 시간/분/초 단위로 sleep 변수를 사용하여 대기 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. sleep으로 몇 초 대기 은 N초간 대기를 합니다. 즉, 다음 코드는 수행되지 않으며, 설정된 시간이 지나면 다시 코드가 실행됩니다. Output: 시간/분/초 단위로 sleep 아래와 같은 문법으로 특정 시간 만큼 지연시킬 수 있습니다. 만약 0.5초 처럼, 1초보다 작은 시간을 대기해야 한다면 아래와 같이 소수점으로 표현하면 됩니다. 변수를 사용하여 대기 아래와 같이 sleep과 변수를 사용하여 일정 시간 대기시킬 수도 있습니다. Output:

[Shell Script] if문에서 문자열 비교

if문에서 두개의 문자열이 같은지, 다른지 비교하는 방법에 대해서 알아보겠습니다. 1. == 를 이용한 방법 2. != 를 이용한 방법 3. < 으로 문자열 크기 비교 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. == 를 이용한 방법 if문에서 연산자를 이용하여 두개의 문자열이 같은지 비교할 수 있습니다. : str1과 str2가 같으면 true Output: 2. != 를 이용한 방법 if문에서 연산자를 이용하여 두개의 문자열이 다른지 비교할 수 있습니다. 와 반대이며, 가독성에 따라서 두개를 교차하여 사용할 수 있습니다. : str1과 str2가 다르면 true, 같으면 false Output: 3. < 으로 문자열 크기 비교 두개의 문자열이 다를 때, 문자열 간의 크기를 비교할 수 있습니다. 문자열 크기 비교는 문자열들을 알파벳 순서로 정렬할 때 사용될 수 있습니다. 알파벳 문자의 경우, 첫번째 문자부터 비교하며, 알…

[Shell Script] if문에서 문자열 포함 여부 확인

if문에서 어떤 문자열이 다른 문자열에서 포함되었는지 확인할 때, 어떻게 구현하는지 알아보겠습니다. 1. [[ string1 =~ string2 ]]으로 문자열 포함 확인 2. substring을 이용하여 포함 여부 확인 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. [[ string1 =~ string2 ]]으로 문자열 포함 확인 를 사용하여 string에 string2가 포함되어있는지 확인할 수 있습니다. 아래 예제는 string 문자열에 pattern 문자열이 포함되어있는지 확인하는 예제입니다. Output: if문에 문자열을 직접 입력하여 포함 확인 만약 문자열 변수와 비교하지 않고, 직접 if문에 문자열을 입력하여 비교하려면, 아래와 같이 비교하시면 됩니다. Output: ’==‘를 이용한 방법 를 이용하여 비교할 수도 있습니다. 아래 코드들은 모두 string에 문자열 “World”가 포함되어있는지 확인하는 코드입니다. …

[Shell Script] 문자열 뒤에서 자르기

문자열을 뒤에서 원하는 만큼 자르는 방법에 대해서 알아보겠습니다. 1. 뒤에서 원하는 문자 개수만큼 문자열 자르기 2. rev와 cut을 이용하여 뒤에서 자르기 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. 뒤에서 원하는 문자 개수만큼 문자열 자르기 아래 예제는 문자열 뒤에서 길이만큼 자릅니다. : 문자열 뒤에서 length 만큼 잘라서 리턴, Index 부터 마지막까지 문자열 자르기 Output: 다른 예제 만약 뒤에서 5개 문자부터 3개 문자를 자르고 싶을 때는, 아래와 같이 구현하면 됩니다. Output: substring 문법 참고로 위에서 사용된 는 STR의 offset부터 length 길이만큼 자릅니다. offset은 자르려고 하는 문자열의 시작 index이며, length에는 offset부터 자르고 싶은 길이 2. rev와 cut을 이용하여 뒤에서 자르기 아래와 같이 rev와 cut을 사용하여 뒤에서 원하는 길이만…

[Shell Script] 대소문자 변환

Shell script에서 문자열의 대소문자 변환 방법에 대해서 알아보겠습니다. 대문자는 소문자로, 소문자는 대문자로 변경할 수 있습니다. 1. 문자열 전체를 대문자 또는 소문자로 변경 2. 특정 문자만 대문자 또는 소문자로 변경 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. 문자열 전체를 대문자 또는 소문자로 변경 문자열 전체를 대문자 또는 소문자로 변환하는 예제입니다. : string을 대문자로 변환 : string을 소문자로 변환 Output: 2. 특정 문자만 대문자 또는 소문자로 변경 아래와 같이 구현하면 문자열에서 특정 문자들만 소문자 또는 대문자로 변환합니다. : string에서 만 대문자로 변환 : string에서 만 소문자로 변환 Output:

[Shell Script] 사용자 입력 받기

Shell script에서 사용자 입력을 받는 방법에 대해서 알아보겠습니다. 1. read로 사용자 입력 받기 2. Prompt와 함께 사용자 입력 받기 3. 두개 이상의 입력 받기 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. read로 사용자 입력 받기 read로 아래와 같이 사용자 입력을 받을 수 있습니다. : 사용자가 데이터를 입력하면 name 변수에 저장 Output: 2. Prompt와 함께 사용자 입력 받기 read 명령어에 옵션을 사용하여, 사용자에게 메시지(Prompt)를 보여주면서, 사용자 입력을 받을 수 있습니다. Output: 3. 두개 이상의 입력 받기 두개 이상의 입력을 받으려면, 아래와 같이 input에 변수를 두개 입력하면 됩니다. 사용자가 2개의 데이터를 입력하면, 각각의 변수에 값이 입력됩니다. Output:

[Shell Script] 배열 선언, 초기화 방법

Shell script에서 배열(Array) 선언, 값 변경, 접근 등, 배열 사용 방법에 대해서 알아보겠습니다. 1. 배열 선언, 초기화 2. 다른 방법으로 배열 선언 및 초기화 3. 배열의 값 변경 4. for문으로 배열 순회 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. 배열 선언, 초기화 기본적으로 배열은 로 선언 및 할당할 수 있습니다. 배열 값 접근은 로 접근할 수 있습니다. Output: 2. 다른 방법으로 배열 선언 및 초기화 아래와 같은 방법으로 배열 선언 및 초기화도 가능합니다. 로 배열 선언 및 초기화 로 값 접근 Output: 3. 배열의 값 변경 아래와 같은 방법으로 선언된 배열의 값을 변경할 수 있습니다. 로 배열 값 변경 Output: 4. for문으로 배열 순회 선언된 배열은 아래와 같은 방식으로 for문에서 사용될 수도 있습니다. : 배열의 모든 요소를 순회 Output:

[Shell Script] 배열 길이, 크기 확인 방법

Shell script에서 배열의 길이, 크기를 가져오는 방법에 대해서 알아보겠습니다. 1. array[@]를 이용한 방법 2. array[*]를 이용한 방법 3. for문과 배열 길이로 배열의 모든 값 출력 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. array[@]를 이용한 방법 는 배열의 크기 값을 리턴합니다. 아래와 같은 방법으로 배열의 길이를 가져올 수 있습니다. Output: 2. array[*]를 이용한 방법 또한 배열의 크기 값을 리턴합니다. 아래와 같은 방법으로 배열의 길이를 가져올 수 있습니다. Output: 3. for문과 배열 길이로 배열의 모든 값 출력 for문과 배열 길이를 사용하여 배열의 모든 요소를 순회할 수 있습니다. : 0에서 (length-1)까지 반복 순회 : 배열의 i 인덱스 값 출력 Output:

[Shell Script] 파일 존재 확인 방법

Shell script에서 어떤 경로의 파일이 존재하는지 확인하는 방법에 대해서 알아보겠습니다. 1. 파일 또는 디렉토리 존재 확인 2. 디렉토리가 아닌 파일 존재 유무 확인 3. 파일이 아닌 디렉토리 존재 유무 확인 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. 파일 또는 디렉토리 존재 확인 아래와 같은 코드로 디렉토리 또는 파일이 존재하는지 확인할 수 있습니다. 는 디렉토리/파일이 존재하는지 확인하는데 사용됨, 파일이 존재하면 true 도 디렉토리/파일 존재 유무를 확인하는데 사용되지만, 현재 deprecated 되었음 Output: 2. 디렉토리가 아닌 파일 존재 유무 확인 는 파일이 아닌 디렉토리에 대해서도 존재 유무를 체크할 수 있습니다. 예를 들어, 는 디렉토리인데, 아래와 같이 로 체크하면 파일이 존재한다고 인식합니다. Output: 아래와 같이 체크하고 싶을 수 있습니다. 이럴 때는 연산자로 체크하면 됩니다. 해당 …

[Shell Script] 커맨드라인으로 인자 전달 받기

쉘 스크립트를 커맨드 라인에서 실행할 때 인자를 전달할 수 있습니다. 터미널에서 어떻게 인자를 전달하고, 스크립트에서 어떻게 인자를 받는지 예제로 알아보겠습니다. 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. 커맨드 라인에서 인자 전달 터미널에서 다음 명령어로 인자 없이 또는 인자와 함께 스크립트를 실행합니다. : 인자 없이 스크립트 실행 : 스크립트 실행하며 인자 1개 전달 : 스크립트 실행하며 인자 3개 전달 2. 스크립트에서 인자 받기 전달된 인자는 스크립트 안에서 으로 받을 수 있습니다. N은 전달된 인자의 순서가 됩니다. : 첫번째로 전달된 인자 값 : 두번째로 전달된 인자 값 : N번째로 전달된 인자 값 인자 3개를 전달하면서 스크립트를 실행하면 아래와 같이 출력됩니다. 인자를 전달하지 않거나, 1개 또는 2개만 전달하면 아래와 같이 동작합니다. 전달되지 않은 인자는 빈 값(null)이 됩니다. 3. 전달받은 …

[Shell Script] 문자열 합치기

두개 이상의 문자열을 합쳐서 하나의 문자열로 만드는 방법에 대해서 알아보겠습니다. 1. $으로 문자열 치환 및 연결 2. 두개의 문자열 연결 3. += 를 이용하여 문자열 연결 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. $으로 문자열 치환 및 연결 를 사용하여 하나의 문자열에 여러 문자열들을 입력할 수 있습니다. 아래 예제는 두개의 문자열을 하나의 문자열로 조합하는 예제입니다. : 문자열에서 과 는 각 문자열의 값으로 변환됨 : 중괄호를 사용해도 됨 Output: 2. 두개의 문자열 연결 아래와 같이 를 사용하여 문자열을 연결할 수 있고, 중간에 다른 문자열을 넣고 싶다면 을 사용하여 추가하면 됩니다. 따옴표 없이도 가운데 문자를 추가할 수 있지만, 띄어쓰기가 포함되면 실행 중 에러가 발생합니다. Output: 3. += 를 이용하여 문자열 연결 는 str1에 str2의 문자열을 추가합니다. 아래와 같이 하나의 문자열로 합칠…

[Shell Script] for, whlie, until 반복문

Shell script에서 for, whlie, until을 사용하여 반복문을 사용하는 방법에 대해서 알아보겠습니다. 1. for 문 2. while 문 3. until 문 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. for 문 for문은 다음과 같이 사용할 수 있습니다. 다른 언어의 for문과 동일합니다. 이 예제는 특정 횟수만큼 for문을 반복하는 예제입니다. : i가 1에서 5까지 반복 Output: for문으로 배열을 순회하는 예제 for문을 이용하여 배열의 모든 요소들을 순회하려면 아래와 같이 구현하면 됩니다. Output: break로 for문을 종료하는 예제 for문 안에서 를 호출하면 for문을 중단합니다. 아래 예제는 1에서 10까지 반복하지만, 5에서 break가 호출되어 10까지 반복하지 않고 중단됩니다. Output: for문에서 continue를 사용하는 예제 for문 안에서 를 호출하면 실행 중인 루프를…

[Shell Script] if와 case 조건문

Shell Script의 if문과 case문의 사용 방법에 대해서 알아보겠습니다. 1. if문 2. case문 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. if문 if문은 어떤 조건을 체크하여, 조건에 일치하면 특정 구문을 수행하고 그렇지 않으면 다른 동작을 하는데 사용됩니다. 아래 예제는 가 10일 때와 아닐 때 조건을 체크하여 다른 텍스트를 출력합니다. 에서 조건은 입니다. 에서 는 “is equal to”의 의미로, 가 10과 같으면 true, 그렇지 않으면 false가 리턴됩니다. Output: 조건 연산자 외에, 아래와 같이 다양한 조건 연산자들이 있습니다. Int 비교 연산자 의미 예제 -eq is equal to if [ “$a” -eq “$b” ] -ne is not equal to if [ “$a” -ne “$b” ] -gt is greater than if [ “$a” -gt “$b” ] -ge is grea…

[Shell Script] 현재 날짜, 시간 가져오기

Shell script에서 현재 날짜와 시간을 가져오는 방법에 대해서 알아보겠습니다. 1. date 명령어로 현재 날짜, 시간 가져오기 2. 다른 형식으로 날짜 출력 3. 간단한 표현으로 날짜/시간 출력 이 글의 예제들은 Ubuntu 20.04에서 Bash shell을 사용하여 작성되었습니다. 1. date 명령어로 현재 날짜, 시간 가져오기 다음과 같이 date와 포맷을 이용하여 현재 날짜, 시간을 가져올 수 있습니다. Output: date 아래와 같이 date 정보를 모두 출력할 수도 있습니다. Output: 2. 다른 형식으로 날짜 출력 처럼, 포맷을 변경하면 다른 포맷으로 날짜 정보를 얻을 수 있습니다. Output: 3. 간단한 표현으로 날짜/시간 출력 : Month/Day/Year 형식으로 날짜 출력 : Hour/Min/Sec 형식으로 시간 출력 : 12시 형식으로 시간 출력 Output:

Android 14 변경사항, ForegroundServiceType 꼭 입력해야 함

Android 14의 변경사항으로, foreground service를 AndroidManifest에 선언할 때, 항목을 필수로 명시하도록 변경되었습니다. 속성은 Android 10에서 추가되었지만, 필수로 입력해야하는 항목은 아니였습니다. 하지만, Android 14에서 Target SDK API가 14인 앱은 이 항목을 꼭 입력해야 합니다. 만약 입력하지 않으면 를 호출하여 서비스를 실행시킬 때 가 발생하여 동작이 되지 않습니다. 1. 서비스 타입 종류 2. Foreground 서비스 실행을 위한 새로운 권한 3. Foreground 서비스 실행 1. 서비스 타입 종류 에 입력할 수 있는 타입은 아래와 같습니다. health, remoteMessaging, shortService, specialUse, systemExempted 타입은 Android 14에서 신규로 추가되었습니다. 앱의 타입과 맞지 않으면, 구글은 foreground 서비스 대신에 WorkManager나 J…

Android 14부터 Target API 23 미만 앱 설치 불가

Android 14 디바이스에서 Target SDK API(targetSdkVersion) 22 이하로 빌드된 Apk는 설치할 수 없도록 변경되었습니다. 만약 설치하려고 시도하면, 아래와 같은 에러가 발생하며 설치가 실패합니다. 왜 이렇게 변경되었는지, 자세히 알아보겠습니다. App의 최소 SDK API 제한 Android 13 이하에서는 App의 Target SDK API와 관련 없이 모든 Apk가 설치되었습니다. 하지만, Android 14에서는 App의 Target SDK API가 22 이하일 때 설치가 안되도록 변경되었습니다. 이렇게 변경된 이유는, API 22 이하 앱이 보안 측면에서 취약하기 때문입니다. API 22 이하 앱의 경우는, 설치 후 처음 실행할 때 경고 같은 팝업이 뜨고, 앱 실행 시 권한을 앱에 부여할 것인지 물어봅니다. 그 이유는, API 23에서 Runtime permission이 도입되었기 때문으로, API 22 이하에서는 Runtime permiss…

Android 14 신규 컨셉, 사진/동영상의 일부 접근 권한

Android 13 이하에서 앱은 사진/동영상 접근 권한을 사용자에게 요청하면, 모든 파일에 대해서 접근할 수 있었습니다. 하지만, Android 14에서 사진/동영상에 대한 일부 접근 권한 부여 컨셉이 도입되어, 사용자는 파일 1개 또는 몇개만 앱에 접근 권한을 부여할 수 있게 되었습니다. 아래 사진을 보시면, “Select photos and videos” 메뉴가 새로 생겼고, 이 메뉴를 통해 사용자가 앱에 일부 파일 접근 권한만 부여할 수 있습니다. 이런 새로운 컨셉은 사용자의 Privacy를 보호하기 위해서 입니다. 앱은 미디어 접근 권한을 얻고, 무분별하게 파일에 접근했었지만, 사용자는 필요한 파일만 권한을 부여할 수 있기 때문에, 사용자에게 필요한 파일이 무엇인지 왜 이 파일에 접근해야하는지 상세히 안내할 필요가 있습니다. 1. 퍼미션 요청 2. 동작 원리 3. 참고 1. 퍼미션 요청 Android 14에서 일부 접근 권한 방식을 처리하려면 AndroidManifest…

Android 14 - 암시적 인텐트, ActivityNotFoundException 에러 해결

Android 14 디바이스에서 Target SDK API가 34인 앱은 암시적 인텐트로 자신의 Activity를 실행하려고 할 때 아래와 같은 에러가 발생할 수 있습니다. Android 14에서 암시적 인텐트와 대기 중인 인텐트 제한사항라는 변경사항이 추가되었기 때문인데요, 어떤 경우에 문제가 발생하고 해결 방법은 무엇인지 알아보겠습니다. Activity 실행: 에러: 1. Android 14의 변경사항 간단히 말하면, Android 14 디바이스에서 Target SDK API가 34 이상인 앱은, 암시적 인텐트로 로 선언된 Activity는 실행할 수 없습니다. 예를 들어, 아래와 같이 액티비티를 로 선언했을 때 아래와 같은 암시적 인텐트로 실행하면 Activity를 찾을 수 없다는 에러와 함께 이 발생합니다. 이 변경사항은 Target SDK API가 34 이상인 앱에만 적용됩니다. API가 33 이하인 앱은 에러가 발생하지 않고 액티비티가 실행됩니다. 암시적 인텐트는 Int…

Android 14에서 스크린샷 감지하는 방법

Android 14의 변경사항으로, 스크린샷을 찍을 때 감지하는 API를 제공하고 있습니다. 스크린샷 감지는 사용자의 Privacy 보호를 위해 사용될 수 있습니다. 어떤 그룹 채팅 방에서 누군가 채팅 화면에 대해서 스크린샷을 찍었을 때, 앱은 이것을 감지하고 채팅방에 있는 다른 사용자에게 누군가 대화 내용을 스크린샷으로 저장했다고 알릴 수 있습니다. 1. API 기능 및 제한 사항 2. API 사용 및 스크린샷 감지 방법 3. 내 앱 화면 캡처 방지 1. API 기능 및 제한 사항 Android 14에서 제공하는 스크린샷 감지 API는 사용자가 하드웨어 버튼 등으로 스크린샷을 캡처하는 경우에만 감지합니다. ADB 등으로 스크린샷을 저장할 때는 감지하지 않습니다. 앱은 callback을 등록할 수 있고, 스크린샷이 감지되면 callback을 통해 이벤트가 전달됩니다. 2. API 사용 및 스크린샷 감지 방법 API를 사용하려면 권한이 필요하며, 다음과 같이 AndroidMani…

[Android] ADB로 프로세스/쓰레드 ID 확인 방법

ADB를 사용하여 현재 안드로이드 디바이스에서 실행 중인 프로세스의 ID(PID)를 확인할 수 있고, 또한 프로세스에 생성된 쓰레드의 ID(TID)를 확인할 수 있습니다. 1. 실행 중인 프로세스 ID 확인 2. 쓰레드 ID(TID) 확인 1. 실행 중인 프로세스 ID 확인 명령어는 현재 실행 중인 모든 프로세스의 상태를 출력합니다. 왼쪽 두번째의 숫자는 PID를 의미합니다. Help 명령어를 확인해보면, 사용할 수 있는 옵션과 어떤 의미인지 알 수 있습니다. 는 모든 프로세스의 모든 정보를 출력하는 의미였습니다. 2. 쓰레드 ID(TID) 확인 특정 PID에 생성된 스레드 ID를(TID) 확인하려면, 아래와 같이 를 입력하면 해당 PID의 TID를 모두 출력합니다. 아래의 경우, PID 470이 갖고 있는 모든 TID 리스트를 출력합니다.

[Android] ADB로 Intent 보내기, 실행시키기

Android에서 Intent는 Activity를 실행시키거나, 브로드캐스트를 보낼 때 사용됩니다. 그래서, Intent를 실행한다거나, 보낸다라는 말은 인텐트를 사용하여 액티비티를 실행하면서 Intent를 전달하면서 인텐트가 갖고 있는 데이터, Extra 등의 정보들도 함께 전달한다는 의미가 됩니다. 코드를 사용하여 이런 동작을 수행할 수 있지만, 테스트 목적으로 ADB를 사용하여 간단히 인텐트를 보내는 방법도 있습니다. 1. 브로드캐스트 인텐트 전달 2. 액티비티 실행 1. 브로드캐스트 인텐트 전달 1.1 Action만 갖고 있는 인텐트 아래와 같이 Action만 갖고 있는 인텐트를 보낼 수 있습니다. 이 인텐트를 수신하는 앱은 명령어에 입력한 Action을 수신하는 Receiver를 등록한 앱들이 됩니다. 1.2 Action, Category를 갖고 있는 Intent 만약 Action과 Category를 함께 갖고 있다면 를 사용하여 카테고리를 입력할 수 있습니다. 1.3 D…

[Android] ADB로 App 데이터/캐시 삭제 방법

ADB를 사용하여 앱 데이터 및 캐시 파일을 삭제할 수 있습니다. 앱 데이터와 캐시 디렉토리는 앱의 전용 공간으로, 다른 앱에서 접근하지 못하고 앱 자신만 접근 가능한 공간입니다. 폰에서 App 정보를 들어가면 앱 데이터를 클리어할 수 있는데요. 만약 자동화 테스트 등으로, 스크립트로 앱 데이터 클리어가 필요한 경우, ADB를 사용하여 삭제할 수 있습니다. 1. adb shell pm clear [package name] 를 입력하면 입력한 패키지의 데이터와 캐시 파일이 모두 삭제됩니다. 앱의 캐시 파일은 앱의 데이터 공간에 포함된 부분이며, 데이터를 삭제하면 캐시도 함께 삭제됩니다. 만약 멀티 유저 환경에서, 특정 유저에 설치된 앱의 데이터, 캐시를 삭제하고 싶다면 를 옵션으로 입력하면 해당 유저의 데이터만 클리어할 수 있습니다. 2. adb shell pm clear —cache-only [package name] 만약 캐시만 삭제하고 데이터는 삭제하고 싶지 않다면, 명령어에 …

[Android] ADB로 앱 비활성화, 활성화시키는 방법

설정의 App Info에 들어가면, 앱을 활성화/비활성화시키는 버튼가 있습니다. 이 버튼을 누르면 앱은 활성화/비활성화되어 동작하거나 동작 안할 수 있습니다. 그런데, 일반적으로 시스템 앱은 이 메뉴가 제공되지 않습니다. 하지만, ADB를 사용하면 시스템 앱도 활성화/비활성화 시킬 수 있습니다. 1. ADB로 앱 비활성화 아래 명령어는 일반 사용자(Owner 사용자)에 설치된 package name 앱을 비활성화 시키는 명령어입니다. 옵션으로 특정 유저 설정 (User 0은 Owner User의 ID) 결과로 Success가 보이면 성공한 것이고, 실패하면 에러 메시지가 출력됩니다. 2. ADB로 앱 활성화 아래 명령어는 일반 사용자(Owner 사용자)에 설치된 package name 앱을 활성화 시키는 명령어입니다. 옵션으로 특정 유저 설정 (User 0은 Owner User의 ID) 3. 앱이 활성화/비활성화 되었는지 확인하는 방법 을 입력했을 때, 패키지의 정보가 출력되는…

[Android] ADB로 bugreport / dumpstate 로그 추출

ADB를 사용하여 bugreport 및 dumpstate 로그를 추출할 수 있습니다. bugreport(dumpstate) 로그 파일은 로그캣을 포함하여 dumpsys 등, 디바이스의 전반적인 로그가 모두 포함된 로그 파일입니다. 1. adb bugreport [file name] 는 로그를 추출하여 PC에 으로 저장합니다. 경로는 adb 명령어를 입력한 작업 디렉토리 경로에 저장됩니다. 예를 들어, 아래와 같이 명령어를 입력하면 파일이 현재 작업 디렉토리 경로에 저장됩니다. 로그를 추출하는데 시간이 필요하니 조금 기다리시면 추출이 됩니다. 파일 이름을 확인하면, 입력한 파일로 지정됩니다. 2. adb bugreport 명령어만 사용해도 로그 파일을 추출할 수 있습니다. 파일 이름을 지정하지 않았기 때문에, 현재 날짜 기반으로 만들어진 이름으로 파일이 생성됩니다. 아래와 같이 로그를 추출할 수 있고, 추출 후 파일 이름을 확인하면, 임의로 생성된 파일 이름으로 생성됩니다.

[Dart/Flutter] null check와 null safety

개발을 하다보면 null 객체에 접근하여 에러가 발생하는 일이 많습니다. 이 에러를 피하기 위해 null check 코드를 추가하여 예외처리를 하게 되는데요. null check 코드를 넣다보면 어느새 매우 많은 null check로 코드가 길어지고 지저분해지기도 합니다. 이 글은 Dart에서 null check를 하는 방법과 Dart에서 지원하는 null safety(null 안정성)에 대해서 소개하려고 합니다. 1. if문과 삼항연산자로 null check 2. null-aware 연산자(??)로 null check 3. 메소드에서 null-aware 연산자(.?) 4. null safety (null 안정성) 1. if문과 삼항연산자로 null check 다른 언어와 동일하게 if문으로 다음과 같이 null check를 할 수 있습니다. 또는, 다음과 같이 삼항연산자를 사용하여 어떤 값이 null이면 default로 다른 값을 입력하도록 구현할 수도 있습니다. 2. null-…

[Javascript] 소수점 2자리까지 표시

소수를 갖고 있는 실수를 출력해야할 때, 소수점 아래의 숫자가 매우 많아서 N자리까지 표현해야하는 경우가 있습니다. 이럴 때 어떻게 구현하는지 예제와 함께 알아보겠습니다. 1. toFixed()으로 소수점 2자리까지 표시 2. NumberFormat으로 소수점 2자리 표시 1. toFixed()으로 소수점 2자리까지 표시 은 숫자를 소수점 N자리까지 표시합니다. 리턴 값은 string 타입입니다. 이것을 이용하여 아래와 같이 소수점 2자리까지만 표시되도록 만들 수 있습니다. Output: 소수점 N자리까지 표현하려면 으로 N자리까지 표시하도록 만들면 됩니다. Output: 2. NumberFormat으로 소수점 2자리 표시 NumberFormat를 생성할 때, 인자로 최소/최대 소수점 자릿수를 설정할 수 있으며, 둘다 2로 설정하면 소수점 2자리까지만 표시할 수 있습니다. 생성된 formatter를 이용하여, 로 설정된 포맷으로 변형할 수 있습니다. 아래 예제는 소수점 2자리까지만…

[Javascript] 숫자 앞자리 0 제거

“00001234” 같이 숫자인데 문자열로 되어있는 경우가 있습니다. 문제는 앞에 0000 같은 무의미한 0이 포함되어있는 것입니다. 무의미한 앞자리 0을 제거하려면 어떻게 해야할까요? 예제를 통해서 0을 제거하는 방법에 대해서 알아보겠습니다. 1. Number로 앞자리 0 제거 2. parseInt()로 앞자리 0 제거 3. 정규표현식으로 앞자리 0 제거 1. Number로 앞자리 0 제거 는 문자열 str을 number 타입 변수로 변환합니다. number 타입으로 변환하면서 앞자리 0은 모두 제거됩니다. string 타입이 필요하다면, 으로 number를 string 타입으로 변환할 수 있습니다. Output: 2. parseInt()로 앞자리 0 제거 는 문자열 str을 10진수로 파싱하며, number 타입의 객체 리턴합니다. string 타입이 필요하다면, 으로 number를 string 타입으로 변환할 수 있습니다. Output: 3. 정규표현식으로 앞자리 0 제거 정…

[Python] 문자열에서 한글만 가져오기/제거하기

문자열에서 한글만 가져오거나, 한글이 아닌 다른 문자들만 가져오는 방법에 대해서 알아보겠습니다. 한글, 영어, 숫자 등의 문자가 섞여있고 한글만 필요할 때 또는 한글만 제거해야하는 경우, 정규표현식으로 한글을 찾아서 예외 처리할 수 있습니다. 1. 한글만 추출 2. 한글만 제거 3. 한글, 공백 모두 제거 1. 한글만 추출 re.sub(pattern, repl, str)는 str에서 패턴에 해당하는 문자열을 찾고 repl로 변환합니다. 아래 예제와 같이 문자열에서 한글이 아닌 문자들을 찾고, 빈 문자열로 변환하여 제거할 수 있습니다. 한글이 아닌 문자를 제거하면 문자열은 한글만 남게 됩니다. : 한글이 아닌 문자들을 의미하는 패턴 : NOT의 의미로, 한글 패턴과 함께 사용되어 한글이 아닌 문자들을 의미하게 만들 수 있음 : 한글을 제외한 문자들을 찾아서 빈 문자열로 변환 Output: 2. 한글만 제거 위에서 사용한 정규표현식에서 을 제거하면, 문자열에서 한글만 제거할 수 …

[Python] 코드 실행 시간 측정

어떤 기능을 구현했을 때, 퍼포먼스가 좋지 않으면 문제가 될 때가 있습니다. 또는, 기존 코드가 느려서 개선했는데 얼마나 개선이 되었는지 시간을 측정해야할 때가 있습니다. 이 글에서는 코드의 실행 시간이 얼마인지 측정하는 방법에 대해서 소개합니다. 1. perf_counter()으로 시간 측정 2. time()으로 시간 측정 3. timeit으로 시간 측정 1. perf_counter()으로 시간 측정 는 CPU 시간으로 수행 시간을 측정하여, 조금 더 정확하게 시간을 측정할 수 있습니다. 는 시간을 리턴하며, 코드 실행 전/후에 시간을 기록하고 차를 계산하여 실행 시간을 구할 수 있음 아래와 같이 어떤 코드의 실행 시간을 측정할 수 있습니다. Output: 2. time()으로 시간 측정 UTC time을 초단위로 리턴합니다. UTC는 1970년 1월 1일을 0초로 현재까지 흐른 시간을 계산하는 방식입니다. 위의 예제와 동일하게, 은 호출 시점의 시간을 리턴하며, 코드 실행 전…

[Android] MediaStore에서 사진/동영상/오디오 파일 읽기

Android에서 MediaStore는 디바이스에 저장된 사진/동영상/오디오 등의 미디어 파일을 관리합니다. MediaStore는 Query API를 제공하며, 이 API를 사용하여 파일들을 탐색할 수 있습니다. 예제를 통해 미디어 파일 정보는 가져오는 방법에 대해서 알아보겠습니다. 1. 미디어 파일 접근 권한 2. 모든 이미지 파일 가져오기 3. 모든 비디오 파일 가져오기 4. 모든 오디오 파일 가져오기 1. 미디어 파일 접근 권한 미디어 파일은 OS 버전 별로 요구하는 권한이 조금씩 다릅니다. Android 13에서 는 더 이상 사용되지 않고, 3개의 권한으로 분리되었습니다. 기존에는 1개의 권한으로 모든 종류의 미디어 파일을 읽을 수 있었지만, Android 13부터 미디어 파일 종류에 따라서 READ 권한이 3개로 분리되었습니다. Android 12L 이하 버전 : Android 13 이상 버전 : , , 앱의 AndroidManifest에는 아래와 같이 OS 별로 …

Android 14 미디어 파일 일부 접근 권한(READ_MEDIA_VISUAL_USER_SELECTED)

Android 14의 새로운 미디어 파일 권한 컨셉, 미디어 파일(사진/동영상)의 일부 액세스 권한에 대해서 알아보겠습니다. Android 13에서는 앱은 미디어 파일 전체 접근 권한만 요청할 수 있었는데, Android 14에서 일부 파일 접근 권한만 요청할 수 있도록 변경되었습니다. 사생활(Privacy) 보호 측면에서 사용자는 앱이 필요한 파일만 접근할 수 있도록 권한을 부여할 수 있습니다. 앱 또한 전체 파일이 필요 없는데 과도한 권한을 사용자에게 요청하지 않아도 되서, 사용자가 앱에게 파일 권한을 거부감 없이 부여해줄 수 있습니다. 1. 새로운 권한 소개 2. 권한 요청 방법 3. 권한 확인 방법 4. 미디어 파일 찾기 & 접근 방법 1. 새로운 권한 소개 Android 13에서는 아래 두개 권한을 사용자에게 요청하여 모든 사진/동영상 파일의 접근 권한을 받을 수 있었습니다. Android 14에서는 위 두개 권한과 함께 권한을 요청하면, 파일 전체가 아닌, 일부 파…

[Javascript] Jest로 Unit Test하기

Jest 라이브러리는 페이스북에서 만든 자바스크립트 테스팅 라이브러리입니다. Jest를 사용하여 Javascript의 Unit test 코드를 작성하는 방법에 대해서 알아보겠습니다. 1. Unit test(단위 테스트)란? 2. Jest란? 3. Jest로 Unit Test를 작성하는 방법 4. Jest 테스트 방법 더 알아보기 5. 참고 1. Unit test(단위 테스트)란? 유닛 테스트는 특정 모듈이 잘 동작하는지 테스트하는 방법으로, 다른 모듈, 라이브러리, Framework 등에 의존성이 없고, 해당 모듈만 테스트합니다. 그렇기 때문에 테스트 시간이 짧으며, 모듈의 Input/Output을 빠르게 확인하여 문제를 조기에 찾아 해결할 수 있습니다. 유닛 테스트를 작성하면 잘못된 시스템 구조, 클래스 구조를 쉽게 파악할 수 있어서 시스템을 디자인하는데 도움이 될 수 있습니다. 또한 테스트 코드를 작성하는 것에 시간을 많이 사용한다고 하는데, 테스트 코드를 작성하면서 개발하는 …

[Android] ADB로 현재 보이는 액티비티 확인

디버깅 목적으로, 현재 Top에 실행 중인 액티비티가 무엇인지 확인하고 싶을 때가 있는데요. ADB 명령어를 이용하여 확인할 수 있습니다. 어떤 명령어로 확인하는지 자세히 알아보겠습니다. 1. ADB로 현재 실행 중인 액티비티 찾기 2. ADB로 현재 실행 중인 액티비티의 PID 찾기 1. ADB로 현재 실행 중인 액티비티 찾기 리눅스나 MAC에서 다음과 같이 adb로 dumpsys 로그에서 현재 Top에 실행 중인 액티비티 이름을 찾을 수 있습니다. grep은 명령어의 출력 내용에서 특정 키워드로 검색되는 문자열 한줄을 찾는 명령어 으로 모든 내용을 출력하고, 거기에서 mCurrentFocus, mFocusedApp, mObscuringWindow에 해당하는 내용을 찾아도 됨 예를 들어, Chrome을 실행한 상태에서 명령어를 입력하면, mObscuringWindow로 Top에 실행 중인 Chrome의 Window 정보가 보이며 여기서 패키지 이름과 액티비티 이름을 찾을 수 있습…

[Android] Adb 화면 캡쳐 & 녹화 명령어

ADB 명령어로 화면을 캡쳐(스크린샷)하거나, 녹화하여 동영상 파일로 저장하는 방법에 대해서 알아보겠습니다. 스크린샷은 폰에서도 쉽게 저장할 수 있지만, 기본적으로 기능을 제공하고 있지 않습니다. 내 화면을 동영상으로 저장하여 다른 사람에게 공유하거나 편집할 때 이런 방법을 사용할 수 있습니다. 1. 스크린샷 저장 adb 명령어로 스크린샷은 아래와 같이 찍을 수 있으며, 특정 경로에 파일을 저장할 수 있습니다. 예를 들어, 아래와 같이 화면을 캡쳐하여 경로 파일에 저장할 수 있습니다. PC에서 파일을 확인해보려면, 아래와 같이 디바이스의 파일을 PC로 가져올 수 있습니다. 파일은 터미널의 현재 작업 디렉토리로 복사됩니다. 2. 화면을 동영상으로 저장 adb 명령어로 동영상은 아래와 같이 촬영 시작하며, 를 눌러 ADB 실행을 종료시키면 촬영이 완료되고, 비디오 파일로 저장됩니다. 예를 들어, 아래와 같은 명령어로 동영상 촬영을 하고, 종료시키면 해당 경로로 파일이 만들어집니다. …

[Android] ADB 앱 삭제 명령어

패키지 이름을 알면, ADB로 특정 앱을 삭제할 수 있습니다. 런처에서 터치로 앱을 삭제시킬 수 있지만 자동화 테스트를 구축하거나, 쉘 명령어로 앱을 삭제시키고 싶을 때 이런 방법을 사용할 수 있습니다. 1. ADB로 앱 삭제 2. ADB로 앱 데이터 삭제 특정 유저 데이터/캐시 삭제 3. 참고 1. ADB로 앱 삭제 다음 명령어로 특정 패키지(앱)를 삭제시킬 수 있습니다. 아래 명령어는 유튜브(com.google.android.youtube) 앱을 삭제합니다. 만약 디바이스에 멀티 유저가 설치되어있고, 특정 사용자에 설치된 앱을 삭제하려면 다음과 같이 옵션을 추가해야 합니다. 아래 예제는 User 0(Owner 사용자)에 설치된 유튜브 앱을 삭제합니다. 2. ADB로 앱 데이터 삭제 ADB로 앱은 삭제하지 않고, 앱의 데이터를 삭제하여 초기화할 수 있습니다. 아래 명령어는 특정 패키지의 데이터를 삭제합니다. 예를 들어 다음과 같이 유튜브 앱의 데이터를 삭제할 수 있으며, 삭제가…

[Linux] chmod 777 하위 폴더, 모든 파일 적용

리눅스 명령어에서 chmod 777은 어떤 파일의 권한을 777로 변경하는 것입니다. 777 권한은 파일의 owner/group/others에 Read, Write, Access 권한을 모두 부여하는 것을 의미합니다. 777은 모든 사용자에게 모든 파일 접근 권한을 부여하는 것이기 때문에, 보안 측면에서 설정할 때 유의해야 합니다. 만약 어떤 폴더와, 그 폴더 하위의 모든 파일에 대해서 777 권한을 부여하려면 어떻게 해야할까요? 1. 하위 모든 파일에 777 권한 부여 아래와 같이 옵션을 사용하여 폴더 및 하위 모든 파일에 777 권한을 부여할 수 있습니다. 예를 들어, git_sample 폴더와 하위 파일의 권한은 현재 이렇게 설정되어있는데요. 여기서 위 명령어를 사용하면, 폴더 및 하위 파일의 권한이 모두 777로 변경됩니다.

[Linux] chown 하위 폴더, 파일 모두 적용

리눅스에서 chown은 파일의 소유자, 그룹 이름을 변경하는 명령어입니다. 만약 어떤 폴더와, 이 폴더 하위의 모든 파일에 대해서 동일하게 소유자와 그룹 이름을 변경하려면 어떻게 해야 할까요? 1. 하위 폴더 모든 파일의 소유자/그룹 변경 chown으로 소유자와 그룹명을 변경할 때, 옵션을 사용하면 디렉토리 및 하위 모든 파일도 동일하게 적용됩니다. newowner : 변경하려는 새로운 소유자 이름 newgroup : 변경하려는 새로운 그룹 이름 -R : 디렉토리의 하위 모든 파일들도 적용 예를 들어, git_sample과 하위 파일들의 owner/group은 모두 mjs로 설정되어있습니다. 다음과 같이 옵션을 사용하여 새로운 owner/group 이름을 변경하면, 하위 파일들까지 모두 새로운 이름으로 적용된 것을 볼 수 있습니다.

[Linux] 터미널 현재 경로 확인

터미널에서 현재 작업 경로는 정확히 보이지 않습니다. 처럼 생략되어 있을 수도 있기 때문입니다. 터미널에서 정확한 작업 경로(path)를 확인하고 싶을 때, 사용할 수 있는 방법들을 소개합니다. 1. pwd 명령어 2. 절대 경로 출력 1. pwd 명령어 pwd 명령어를 입력하면, 아래와 같이 현재 작업 경로를 출력합니다. cd로 다른 경로로 이동하고 다시 pwd를 입력하면, 변경된 경로가 출력됩니다. 2. 절대 경로 출력 pwd는 현재 디렉토리의 경로를 출력하는데, 만약 현재 폴더가 심볼릭 링크인 경우, 상대 경로가 됩니다. 만약 심볼릭 링크 폴더에서 pwd를 입력했을 때, 실제 파일이 위치한 절대 경로를 얻고 싶을 때는, 옵션을 함께 입력하면 됩니다. 예를 들어, 는 심볼릭 링크이고, 디렉토리를 가리킬 때, pwd는 단순히 현재 폴더의 경로를 출력하지만, 를 함께 입력하면 원본 디렉토리의 경로를 출력합니다.

[Linux] 심볼릭 링크 생성, 해제 방법

심볼릭 링크(Symbolic Link)는 리눅스, 유닉스 기반 운영 체제에서 사용되는 파일의 바로 가기입니다. 명령어로 심볼릭 링크를 생성, 해제하는 방법에 대해서 알아보겠습니다. 1. 심볼릭 링크 생성 2. 심볼릭 링크 해제 1. 심볼릭 링크 생성 터미널에서 아래와 같이 파일에 대한 심볼릭 링크(바로가기 파일)을 생성할 수 있습니다. 예를 들어, 아래와 같이 심볼릭 링크를 생성할 수 있습니다. 생성된 링크를 명령어로 확인해보면 아래와 같이 로 원본 파일의 주소를 가리킵니다. 2. 심볼릭 링크 해제 심볼릭 링크를 삭제하려면 rm 명령어를 사용합니다. 링크를 삭제해도 원본 파일을 삭제하거나 영향을 주지 않습니다. 단순히 링크 파일만 삭제됩니다. 예를 들어, 아래와 같이 심볼릭 링크를 삭제할 수 있습니다. 원본 파일을 명령어로 확인하면, 원본 파일은 삭제되지 않은 것을 확인할 수 있습니다.

[Dart/Flutter] 두 리스트의 공통 값 찾기

두개의 리스트가 공통적으로 갖고 있는 요소들을 찾는 방법을 예제와 함께 알아보겠습니다. 공통적으로 갖고 있다는 의미는, 두 리스트가 동일한 요소 값을 서로 갖고 있다는 의미로, 두 리스트의 교집합이라고 생각할 수 있습니다. 1. Set를 이용한 방법 2. for문을 이용한 방법 1. Set를 이용한 방법 Set는 함수를 제공하며, 두 Set의 공통 값을 갖고 있는 Set 객체를 리턴합니다. 따라서, 리스트를 Set로 변환하여 intersection() 함수로 공통 요소를 찾고, 다시 리스트로 변환하는 방법이 있습니다. 함수로 Set를 리스트로 변환 함수로 공통 요소 찾기 로 Set를 리스트로 변환 Output: 2. for문을 이용한 방법 아래와 같이 list1의 모든 값을 순회하면서, 어떤 값이 list2에 있을 때, 다른 리스트에 저장하여 공통 요소만 찾을 수 있습니다. for문으로 list1의 모든 요소 순회 list1의 어떤 요소가 list2에 있다면, 공통 값만 저장…

[Dart/Flutter] Double을 Int로 변환, 4가지 방법

Double 타입의 변수를 Int 타입으로 형변환하는 다양한 방법을 알아보겠습니다. Double을 Int로 변환하는 것은 간단하지만, 소수점 이하 숫자를 반올림할지, 올림 또는 버림할지에 따라서 필요한 함수를 사용해야 합니다. 1. toInt()를 이용한 방법 2. round()를 이용한 방법 3. ceil()을 이용한 방법 4. floor()를 이용한 방법 1. toInt()를 이용한 방법 는 double 타입을 int 타입으로 변환합니다. 변환하는 과정에서 소수점 이하의 숫자는 모두 버려집니다. 소수점 이하 숫자를 반올림하지 않으며, 다음에 소개하는 와 동일한 결과를 만듭니다. Output: 2. round()를 이용한 방법 는 double 타입의 숫자를 소수점 1자리에서 반올림하여 int 타입으로 변환합니다. Output: 3. ceil()을 이용한 방법 는 double 타입의 숫자를 소수점 1자리에서 올림하여 int 타입으로 변환합니다. Output: 4. floor()를 …

[Dart/Flutter] 두개의 Map 하나로 합치기

두개 이상의 Map을 하나의 Map으로 병합하는 방법에 대해서 알아보겠습니다. Map을 합칠 때 key가 모두 다르다면 문제는 없지만, 동일한 key가 다른 값을 갖고 있을 때는 어떤 값을 우선시할지에 따라서 구현 방법이 달라져야 합니다. 1. Spread Operator(전개 연산자)를 이용한 방법 Spread Operator는 같은 표현 방법인데, 객체가 갖고 있는 요소를 나열합니다. 아래와 같이 Spread Operator를 사용하면 Map 안의 요소들을 나열하여 새로운 Map의 요소에 포함됩니다. : map을 선언할 때, map1과 map2의 요소를 초기 값으로 입력 map1과 map2는 변하지 않고, 합쳐진 새로운 map이 생성됨 동일한 key가 있을 때, map2(뒤에 있는)의 값으로 업데이트됨 Output: 2. addAll()을 이용한 방법 는 map1에 map2의 모든 요소를 추가합니다. map1에는 map2의 요소가 추가되고, map2는 변경되지 않음 map을…

[Dart/Flutter] 문자열 분리하기, 자르기

문자열을 여러 문자열로 분리하는 방법에 대해서 알아보려고 합니다. 특정 문자를 기준으로 문자열을 분리하거나, 특정 Index를 기준으로 문자열을 여러 문자열로 나누고 싶을 때가 있습니다. 1. split()을 이용한 방법 2. 정규표현식을 이용한 방법 3. for문을 이용한 방법 4. 특정 Index로 문자열 자르기 1. split()을 이용한 방법 은 문자열을 str 기준으로 자르며, 분리된 문자열들을 리스트에 담아 리턴합니다. 아래 예제를 보시면, 문자열을 comma로 나누거나 공백으로 분리하였습니다. Output: 2. 정규표현식을 이용한 방법 정규표현식을 사용하여 아래와 같이 특정 문자로 문자열을 분리할 수 있습니다. : comma 문자열을 찾는 패턴 : text에서 패턴 regex에 해당하는 문자열을 찾고, 그 문자열을 기준으로 분리함 Output: 3. for문을 이용한 방법 for문으로 문자열의 문자를 순회하면서, 특정 문자를 기준으로 문자열을 자를 수 있습니다. …

[Java] 소수점 n자리까지 출력, 3가지 방법

float을 소수점 2자리까지 표시하여 출력하는 방법에 대해서 알아보겠습니다. 1. String.format()을 이용한 방법 2. DecimalFormat을 이용한 방법 3. Math.round()를 이용한 방법 1. String.format()을 이용한 방법 처럼 숫자 number를 소수점 n자리까지 표시할 수 있습니다. 는 소수점 n자리까지 표시하며, n+1 자리에서 반올림 Output: 2. DecimalFormat을 이용한 방법 처럼 소수점 n자리까지 표기할 수 있습니다. 소수점 n+1자리에서 반올림하여 소수점 n자리까지 표시됩니다. 은 문자열을 리턴 처럼 double로 변환할 수 있음 Output: 3. Math.round()를 이용한 방법 는 숫자 n을 반올림하여 정수로 만듭니다. 예를 들어, 소수점 3자리 이상 있는 실수를 2자리까지 반올림하려면, 숫자에 100을 곱하고 로 반올림하고 다시 100으로 나누면 됩니다. Output:

[Dart/Flutter] 문자열 비교 (동등, 포함)

두개의 문자열이 같은지 비교, 포함 여부인지 등, 다양한 문자열 비교 방법에 대해서 알아보겠습니다. 1. == 연산자로 문자열이 같은지 비교 2. compareTo()로 문자열이 같은지 비교 3. contains()로 문자열 포함 여부 확인 4. startsWith(), endsWith()로 문자열 시작/끝 확인 1. == 연산자로 문자열이 같은지 비교 는 두개의 문자열이 같을 때 true, 다를 때 false를 리턴합니다. 아래와 같이 두개의 문자열이 같은지 비교할 수 있습니다. 대소문자를 구분하여 비교합니다. 알파벳이 같아도 대소문자가 다르면 다른 문자열로 판단됨 Output: 대소문자 구분 없이 비교 대소문자 구분 없이 비교하려면, 두개의 문자열을 모두 소문자 또는 대문자로 변경하여 비교하면 됩니다. 아래 예제는 두개의 문자열을 모두 소문자로 변경하여 비교합니다. Output: 2. compareTo()로 문자열이 같은지 비교 는 str1과 str2가 같을 때 0을 리턴, 다…

[Dart/Flutter] 문자열 마지막 문자 제거

문자열에서 마지막 문자만 제거하는 방법에 대해서 알아보겠습니다. 1. substring()으로 마지막 문자 제거 2. split()으로 마지막 문자 제거 3. 정규표현식으로 마지막 문자 제거 1. substring()으로 마지막 문자 제거 는 문자열의 start Index에서 end Index 이전까지 잘라서 리턴합니다. 즉, start는 포함하고 end는 포함하지 않는 문자열을 리턴합니다. 따라서, 아래와 같이 Index 0에서 마지막 문자의 Index 이전까지 자르도록 하여 마지막 문자만 제거할 수 있습니다. Output: 2. split()으로 마지막 문자 제거 는 문자열을 문자 1개 단위로 분리하고 각각의 문자가 저장된 리스트를 리턴합니다. 리턴된 리스트에서 함수로 마지막 요소를 삭제하고 다시 으로 리스트의 모든 값들을 합치면 마지막 문자만 제거된 문자열이 리턴됩니다. Output: 3. 정규표현식으로 마지막 문자 제거 은 string에서 pattern과 일치하는 문자열을…

[Kotlin] 특정 문자열 자르기

문자열에서 어떤 문자열을 자르거나, 특정 문자로 문자열을 분리하는 방법에 대해서 알아보겠습니다. 1. substring() : Index 범위로 문자열 자르기 2. split() : 특정 문자열 기준으로, 문자열 분리 3. substringBefore() : 특정 문자열 기준으로, 문자열 나누기 1. substring() : Index 범위로 문자열 자르기 string.substring(start, end)는 문자열에서 start를 포함하고 end를 포함하지 않는 범위의 문자열을 잘라서 리턴합니다. Index 범위로 문자열을 자를 때 사용할 수 있는 방법 아래 예제는 Index 0에서 1의 문자열을 잘라서 리턴 Output: 2. split() : 특정 문자열 기준으로, 문자열 분리 는 특정 문자 또는 문자열을 기준으로, 문자열을 분리합니다. 예를 들어, 문자열에서 를 기준으로 각각의 문자열을 분리시킬 수 있습니다. 아래 예제에서 는 콤마를 기준으로 문자열을 분리하고, 리스트로 분…

[Python] 파이썬 두 리스트 같은 값 찾기

두개의 리스트가 있고, 각각 다양한 요소를 갖고 있을 때, 두 리스트가 공통으로 갖고 있는 값을 찾는 방법에 대해서 알아보겠습니다. 1. 반복문으로 공통 요소 찾기 2. 리스트 컴프리헨션으로 공통 요소 찾기 3. Set로 공통 요소 찾기 1. 반복문으로 공통 요소 찾기 for문을 사용하여 리스트를 순회하면서 다른 리스트에 그 값이 포함되어있는지 확인할 수 있습니다. 이렇게 확인하면서 공통 요소를 리스트에 저장하면 됩니다. Output: 2. 리스트 컴프리헨션으로 공통 요소 찾기 for문 대신에 리스트 컴프리헨션을 사용하면, 더 짧은 코드로 같은 내용을 구현할 수 있습니다. 사용하는 기술은 다르지만, 리스트를 순회하면서 다른 리스트에 공통 요소가 있는지 확인하는 알고리즘은 동일합니다. Output: 3. Set로 공통 요소 찾기 Set는 중복 값을 허용하지 않는 자료구조이며, 이라는 함수를 제공하여 쉽게 공통 요소를 찾을 수 있게 도와줍니다. 는 set1과 set2의 공통 요소만 찾…

[Java] Default Method(기본 메소드)

디폴트 메소드(Default Method) 또는 기본 메소드는 Java 8에서 추가된 기능 중 하나입니다. 디폴트 메소드는 인터페이스의 메소드에서 기본적으로 구현 기능을 제공하는 것인데요, 자세히 알아보겠습니다. 1. 디폴트 메소드(Default Method) 2. 특징: 기본 구현 제공 3. 특징: 기존 코드와의 호환성 4. 특징: 다중 상속 지원 1. 디폴트 메소드(Default Method) 디폴트 메소드는 아래와 같이 인터페이스에서 메소드를 구현하는 것을 말합니다. 이전에는 인터페이스는 메소드를 선언만 할 수 있고, 구현할 수 없었음. 구현은 이것을 구현(implements)하는 클래스에서 할 수 있었음 인터페이스에서 메소드 선언과 동시에 기본 구현을 정의할 수 있음 디폴트 메소드는 아래와 같은 특징이 있습니다. 아래에서 각 특징에 대해서 알아보겠습니다. 기본 구현 제공: 인터페이스에 기본 구현을 제공합니다. 이로 인해 해당 인터페이스를 구현(implements)하는 클래스…

[Java] Stream.sorted(), 정렬하기

Java에서 는 스트림의 요소들을 정렬하는데 사용하는 메소드입니다. 이 메소드를 사용하여 스트림의 요소들을 정렬할 수 있습니다. Stream.sorted()로 스트림 정렬 예제 1. 내림차순으로 정렬 예제 2. 문자열 스트림을 sorted()로 정렬 예제 3. Custom class의 스트림 정렬 예제 4. Comparable이 구현된 Custom class Stream.sorted()로 스트림 정렬 아래 예제는 동일한 스트림에 대해서, 한번은 를 사용하지 않고 요소들을 출력하고, 한번은 사용하고 출력합니다. 를 호출함으로써, 스트림의 요소들이 오름차순으로 정렬되는 것을 볼 수 있습니다. Output: 예제 1. 내림차순으로 정렬 스트림에 인자 없이 를 호출하면 객체에 정의된 Comparator를 사용하여 비교합니다. 일반적으로 오름차순으로 정렬되도록 구현되어있습니다. 만약 내림차순으로 정렬하고 싶다면, 정렬 규칙을 의미하는 Comparator를 직접 구현하여 에 인자로 전달해야 …