[ 백엔드 개발 ](36)
-
[java] 자바 실행 과정 deep dive
자바는 OS와 독립적으로 실행시킬 수 있다. 그 이유는 JVM이 OS에 의존적이기 때문인데, 즉, OS마다 다른 JVM이 존재하기 때문이다. C/C++는 링커, 로더를 포함한 운영체제 바로 위에서 직접적으로 실행되므로, 빠르고 가볍다. 하지만 개발에 있어서 그만큼 메모리 회수 등 개발자가 신경써야 할 부분이 많다. 또한 C/C++ 등의 전통적인 언어는 컴파일 플랫폼(CPU 아키텍처 16bit, 64bit 등 및 OS)에 따라 자료형형의 크기가 변한다. 그래서 윈도우에서 컴파일한 C/C++파일은 리눅스에서 안 돌갈 수도 있다. JVM은 이러한 문제를 근본적으로 해결한다. 자바 소스코드(.java)가 자바 컴파일러(javac.exe)를 거치고 나면, 자바 바이트코드(.class)를 생성하는데, 이 자바 바..
2021.08.24 -
<추천글>[spring] 스프링 프레임워크 정의하기
스프링 프로젝트를 진행하면서 느꼈던 것은 그 목표를 분명히 알고 사용하지 않으면 그 가치를 제대로 얻기 힘들다는 것이였다. 스프링이 제공하는 기술들을 갖다 사용하면 단순히 스프링을 적용한 것 뿐이지 스프링의 장점이 활용되었다고 보기 힘들다. 따라서 스프링의 목적과 왜 만들어졌는지를 파악하고 스프링이 제공해주는 혜택을 제대로 누려서 활용해야 한다는 생각이 들었다. '스프링 프레임워크'란? Spring의 정의는 다음과 같다. 자바 엔터프라이즈급 개발을 쉽게 해주는 '애플리케이션 프레임워크' 위 스프링 정의를 보면 쉽게 와닿지 않을 것이다. 따라서 스프링의 정의에서 설명하고 있는 애플리케이션 프레임워크에 대해 알 필요가 있다. 애플리케이션 프레임워크? 애플리케이션 프레임워크를 이해하기 전에 프레임워크가 무엇인..
2021.08.21 -
[Build] 빌드 의미와 빌드 도구
'빌드'한다는 것의 의미 - 빌드한다는 것은 컴파일보다 훨씬 더 큰 의미를 갖는다. - 빌드툴의 설정파일에 라이브러리의 버전을 명시해주면 자동으로 다운받고 classpath에 추가해준다. (스프링'부트'의 starter를 사용하면 버전을 명시하지 않아도 관련된 의존성을 모두 다운로드 해줌) - 소스코드를 '컴파일'한다. - '테스트 코드'를 실행한다. - 컴파일된 코드를 packaging한다. (jar, war, zip, ddl, exe 등의 파일로 만든다.) - packaging된 파일을 주로 artifact(산출물)라 부르며 서버나 레퍼지토리에 배포한다. 즉, 소프트웨어를 '실행 가능한 하나의 단위'로 구성하는 과정이다. 빌드툴을 사용하는 이유 즉, 빌드도구는 위 일련의 복잡한 작업들을 자동화하고 기..
2021.08.17 -
[java] String = "" 과 new String("") 차이
public class HelloWorld { public static void main(String[] args) { String str1 = "hello"; String str2 = new String("hello"); String str3 = new String("hello"); } } 위 코드에서 str1처럼 바로 " "을 통해 문자열을 선언하면 heap에 있는 String constant pool에 "hello"라는 문자열이 있는지 탐색하고 없을 경우 생성하지만 이미 존재한다면 해당 문자열을 참조한다. str2의 경우 str1과 같이 "hello"라는 문자열을 string constant pool에서 찾고 없다면 새로 만드는 과정은 동일하지만 추가적으로 string pool이 아닌 heap메모리..
2021.08.09 -
[java] interface의 진짜 목적
결론부터말하면 Interface는 abstract method로만 구성된 클래스로써 추상체로 역할을 하며 구현체와 호출하는 쪽 사이의 dependency를 느슨하게 한다. 특히 의존성을 역전(Dependency Inversion)시킴으로써 객체 간 결합도(coupling)를 줄인다. [예제1] public class UserService implements Login{ private KakaoLogin login; private NaverLogin login; // 이하 생략 } [예제2] public class UserService implements Login { private Login login; public UserService(Login login) { this.login = login; } ..
2021.08.04 -
<추천글>[JAVA] 개발하면서 알아야할 기본사항1
1. Java의 Call by Reference 자바는 기본적으로, 객체에 대해서는 call-by-reference이지만, 8개의 primitive type에 대해서는 call-by-value가 적용된다고 생각하면 편합니다. [예제1] public class HelloWorld { public static void main(String[] args) { HelloWorld b = new HelloWorld(); int a = 100; b.doSomething(a); // 100이라는 숫자 자체가 넘어간다. System.out.println(a); // 100이 출력된다. } private void doSomething(int a) { a *= 2; } } 위 예제1에서 변수 a를 초기화하면 메모리의 4b..
2021.08.04