프로그래밍 언어
-
[Java] ThreadLocal 이 필요할 때 (feat. Thread, Thread-Safe, OS, Spring Security)프로그래밍 언어/Java 2022. 3. 15. 13:54
ThreadLocal 오직 한 쓰레드에 의해 읽고 쓰여질 수 있는 쓰레드만의 독립적인 로컬변수 ThreadLocal이 필요할 때 보통 프로세스 내부 자원을 쓰레드들은 공유하게 되는데, 아무처리를 해두지 않으면 쓰레드들은 순서없이 프로세스의 내부자원에 접근하게 된다. 여기서 변경이 생긴다면 그 뒤의 쓰레드들은 변경된 데이터로 작업을 하게 되는데 여기서 생각지 못한 동작을 하게 될 가능성이 많다. 이러한 점을 해결하기 위해 세마포어와 뮤텍스(=이진세마포어)라는 개념이 있지만, 공유변수가 아닌 오직 쓰레드만의 로컬 변수를 사용하고 싶을 때는 ThreadLocal을 사용하게 된다. ThreadLocal의 사용예시 (Spring Security Context Holder) Spring Security에서 Cont..
-
[JavaScript] JS ES6 에 추가된 기능 및 문법 정리프로그래밍 언어/JavaScript & TypeScript 2021. 11. 9. 22:25
# ECMAScript6 Overview and Comparison http://es6-features.org/ ECMAScript 6: New Features: Overview and Comparison Constants Constants Support for constants (also known as "immutable variables"), i.e., variables which cannot be re-assigned new content. Notice: this only makes the variable itself immutable, not its assigned content (for instance, in case the content is es6-features.org 1. String ..
-
[Java] Swap 함수 구현 (Call-by-value)프로그래밍 언어/Java 2021. 10. 15. 18:26
# Call-by-Reference 의 Swap 함수 객체나 배열이 인자로 들어왔을 때, 주소값이 복사되므로 멤버(배열원소)에 직접 접근하여 값을 바꾸면 바꿔진다. 따라서, 일반적인 temp 를 두는 방식으로 값을 교환하면 된다. # Call-by-value 의 Swap 함수 primitive type(int, float, double, ...) 의 값을 바꿔야 하는 경우 Wrapper Class 또한 데이터를 담고있는 멤버에 직접접근 권한이 없기에 해당 경우로 취급하여 주소값 자체 값으로 취급하여 바꿔주면 된다. # 구현 코드 /* Call-by-Value */ public class SwapTest1 { public static int swap(int a, int b){ return a; } publ..
-
JAVA) 백준으로 공부하는 자바일기 (Dynamic Programming)프로그래밍 언어/Java 2021. 10. 8. 01:50
# 1로 만들기 (문제 1463번) 1. 주석친 코드가 DP 사용 (본래 코드는 분기한정사용) 2. DP사용한게 조건이 하나 더걸리니까 속도는 빨라졌다. (당연히 메모리는 늘었지만) 3. 문제를 풀기 위한 코드지, 1로 만들때 사용한 경로는 저장하지 않았기에, 경로출력문제라면 큐를 쓰자 import java.util.*; public class Main { static int temp = 100_000; static int[] visited = new int[100_000_1]; public static int method1(int n){ if(n%3==0) return n/3; return 0; } public static int method2(int n){ if(n%2==0) return n/2; r..
-
[Java] 프로그래머스로 다시 공부하는 자바일기 (프로그래머스 레벨2)프로그래밍 언어/Java 2021. 10. 5. 20:55
# 문자열 압축 * test input case 가 최소일 때와 최대일 때를 항상 고려하자! - 작성한 코드가 최소일 경우에 동일하게 돌아가는 것인가를 항상 체크하자! - 작성한 코드가 최대일 경우에 메모리 문제를 일으키지 않는지 항상 생각하자! * 코딩테스트는 결과물을 만드는 것이 아니다. 리턴값만 맞으면 된다. - 불필요한 값을 저장하지말자! 모든 것을 로그로 남기는 게 목적이 아니다! - 임시저장을 위한 용도라면, List 객체보단 Stack 객체를 사용하자. * 프로그래머스에서 제공하는 스켈톤코드의 answer 를 항상 다시 초기화하자! - 뼈대코드를 건들지 말라는 법은 없다. 1. Long to Int - int num = Long.valueOf(Long_Value).intValue(); imp..
-
[Java] 깊은복사(deepcopy)프로그래밍 언어/Java 2021. 10. 4. 20:04
1. 원시타입의 1차원배열 # clone() 메서드 - 배열안의 값을 복사함 - 따라서, 1차원배열은 deepcopy 가능하나 2차원배열이나 객체배열은 사용 불가능 (2차원배열은 사실상 1차원배열이고, element는 각 1차원배열의 주소값이니, 배열안의 값을 복사하면 주소값을 복사하는 셈) (1차원 객체배열도 같은원리) 2. 원시타입 -> 오브젝트 타입 # Stream을 이용한 복사 - Java 8 이후 버전 - Arrays.stream(원시타입배열).boxed().collect(Colletors.to구현된원하는 자료형()); # for 문을 이용한 복사 - 그냥 for 문으로 복사... 3. 오브젝트 타입 -> 오브젝트 타입 # 생성자를 이용한 deepcopy - ArrayList copiedArrL..
-
[Java] 프로그래머스로 다시 공부하는 자바일기 (프로그래머스 레벨1)프로그래밍 언어/Java 2021. 10. 4. 16:30
* 리액트 해보겠다고 JS 랑 JSX 를 주구장창 사용하다보니 헷갈리는 자바문법을 개인적으로 다시 정리하기 위한 글입니다. * 네이버코테는 구글링이나 IDLE 금지라던데.... 헝헝엏엏ㅇㄹㄱ. * 다 포기하고 C++이나 파이썬으로 코테를 보고싶지만.... 현업을 위한 자바숙련도 기르기 가즈아ㅏㅏㅏㅏㅏㅏㅏ # x만큼 간격이 있는 n개의 숫자 1. 가변배열 선언 - new 자료형[갯수] 2. 형변환 - 작은 타입의 데이터를 큰 타입의 변수에 할당할때는 자동변환된다 ex) int a = 5; long b= a; - 다른 타입간의 연산은 큰 타입으로 변환된 후 연산된다. ex) int a=5, i=0; (long)a*(i+1) int 2. Wrapper 클래스의 length - 멤버변수 length가 아닌 메소..