Call By Value 값에 의한 호출 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성됩니다. 이때, 전달되는 변수 값을 복사해서 함수 인자로 전달합니다. 즉, 변수가 가진 값을 변경해도 원본 값은 변경되지 않습니다. function addOne(x) { x += 1; return x; } let num = 5; console.log(addOne(num)); // 6 console.log(num); // 5 Call By Reference 참조에 의한 호출 함수가 호출될 때, 인자로 전달되는 변수의 레퍼런스를 전달합니다. 따라서 인자 값이 변경되면 객체의 값도 변경됩니다. 이유는 인자로 전달된 값이 변수의 주소이므로, 함수 내에서 변수 값을 변경하면 주소에 저장된 값이 변경..
기술 스텍/Java
Java를 동작시키는데 필요한 JVM에 대해 알아보겠습니다. JVM은 다른 프로그램을 실행시키는 데 목적이 있습니다. 기능으로는 자바 프로그램이 어떤 기기나 OS에서도 실행될 수 있도록 하는데 있습니다. 또한 프로그램 메모리를 관리하고 최적화 하는데 있습니다. 간단한 요약 Java는 OS에 독립적인 특성을 가집니다. JVM을 통해 구현되기 때문입니다. JVM의 동작원리는 다음과 같습니다. 동작순서를 개발자 입장에서 생각해보겠습니다. 1. 개발자가 자바 소스코드를 작성하고 실행해보겠습니다. 2. 자바 컴파일러가 Java Source파일을 컴파일합니다. (이때, 자바 컴파일러는 자바를 설치하면 /bin 폴더에 있는 javac.exe라는 실행 파일 형태로 설치됩니다.) Content {file name}.ja..
String 과 다른 클래스 비교 String, String Builder, String Buffer 모두 String을 사용하기 위해 사용되는 문자열 클래스들입니다. 이렇게 클래스를 분리해서 사용하는 이유에 대해 알아보겠습니다. 우선 문자열을 할당하고, 해당 문자열을 변경해보겠습니다. String str = "Hello"; System.out.println("str : "+System.identityHashCode(str)); StringBuilder sb = new StringBuilder("Hello"); System.out.println("sb : "+System.identityHashCode(sb)); StringBuffer sf = new StringBuffer("Hello"); System...
트랜잭션은 ACID를 통해 설계됩니다. 원자성(Atomicity), 일관성(Consistency), 격리(Isolation) 그리고 영속성(Durability) 그리고 멀티 스레드를 적용할 때 스레드 간 공유자원을 가지고 동작합니다. 이 과정에서 공유자원을 동시에 사용하는 과정에서 문제가 발생하곤 합니다. 이를 동시성 문제라고 합니다. 동시성 문제를 해결하기 위한 해결방법이 락(Lock)입니다. JavaCode를 통한 Lock 락에 대해 천천히 고도화 시켜보겠습니다. public class Product() { private Long productId; private String name; private Long count; // 물건 개수 private Long price; public void buy..