Java/이론 (16) 썸네일형 리스트형 [ JAVA ], [ JSP(.war) ], [ Thymeleaf(.jar) ] 틀릴 수도 있는 글 면접에서 Thymeleaf 써 봤냐고 여쭤보셨다. 차이점을 찾아보다가 WEB, WAS, java 관련까지 갔다. 다음 그림을 보면서 이해해야 한다. 보통 서버라고 하면 Web Container안에 있는 WEB, WAS를 통틀어서말하게 된다. 여기서는 WEB Server, Web Application Server를 확실히 얘기 해야겠다. java랑 thymeleaf랑 같다.필자가 이렇게 생각하는 이유는 다음과 같다. 우선 java안에서 html파일을 생성한 후에 return하면 웹에서똑같이 생성된다. 이렇게 되면 jar로 배포해도 된다는 것을 의미한다. Thymeleaf는 Java 코드 안에서 사용할 수 있는라이브러리이다. 결과적으로 java안에서 html을 사용한다는 것은 같다. 그런.. [ JVM ] , [ Reflection ] - 나의 생각, 기술적 이론 X 맨 처음에 JVM과 Reflection에 대해 기술면접 준비하려고 했다. 근데 나름 신중하게 변수를 지정한다고 생각하니까개인 프로젝트를 진행하면서 변수나 클래스를 생성할 때마다 나름대로 효율적이게 생성하려고 하니까JVM, Reflection, GC를 고려하지 않을 수 없다. 기술적인 이론을 깊게 적지 않고 나의 생각이나 얻은 정보를 얻은 것이다. ※ 나중에 보기 위한 그림1) 객체의 생성 과정byte코드를 통해 class Loader가 클래스와 인터페이스 클래스와 인터페이스, 메서드와 필드, Static 변수,메서드 바이트 코드 등을 보관 의식의 흐름 11) Stack에서 변수를 통해서 객체에 대한 메모리를 그냥 가져오면 되지 않아? → Class Loader을 Method Area에 그에 대한 메.. getter(), setter() 쓰는 이유 무지성으로 남들이 쓰니깐 쓰다가 왜 쓰는지 궁금했다. 캡슐화라고 하는데 그냥 접근하면 보안이나 그런 것에도 의미없는 것 같고 귀찮은데 그냥 getter setter 안 쓰면 안되나 chatgpt의 답 접근제어, 유효성 검사, 의존성 관리같은 경우는 꼭 getter, setter가 아닌 변수로 충분히 가능하다.결국 내 생각에는 읽기 전용 및 쓰기 전용 설정으로 인해 개발자들의 약속이 주된 원인인 것 같다. → 보안의 의미는 아니고 무분별한 접근을 방지하고 신중하게 접근하기 위한 것 Inner Class 1. 멤버 이너 클래스(member inner class) → 생성자 주입 방식클래스 내부에서 선언된 내부 클래스를 멤버 변수처럼 접근 2. 정적 이너 클래스(static inner class)static 키워드를 가지고 있는 이너 클래스를 의미한다.정적 메서드와 동일하게 아우터 클래스의 정적 멤버에만 접근할 수 있다. 위 그림을 보면 "200"을 출력하기 위해 InnerClassTest를 생성하지 않아도 된다.기본적으로 그것이 가능한 것은 static이기 때문이다. static을 올리면 Compile시점에 Data영역에 있는Data Segment부분에 그대로 업로드되기 때문에 InnerClassTest를 생성하지 않아도 메모리에 있는 것을가져와서 사용하면 되기 때문이다. 3. 지역 이너 클래스(loca.. [ int, double, float, NULL ] 메모리 관련해서 NULL이 궁금해져서 Stack Memory에 관련해서 쫌 정리를 해봐야겠다. 그 전에 매개변수, 지역변수는 Stack에 저장된다고 한다. 그러면 계속 쌓일수록 메모리가 쌓여야 하는데GC가 하지 않으면 StackOverflow나지 않나? 그에 대한 답은 힙 영역에서는 Garbage Collector가 작동하지만 스택 영역에서는 JVM내에서 스스로 메소드가 해제되면 매개변수와 지역 변수도 같이 해제 된다. ※ Integer, Double, Boolean, Character도 객체이므로 힙에서 GC에 의해 해제된다. NULL 그럼 NULL이란 무엇인가? 예전엔 대충 그냥 없는 값, 데이터상 존재하지 않는 값이라고만 배웠다. 자세히 알아봐야겠다.정답부터 말하자면 "참조하지 않는다는 것"이다. .. [ static ], [ final ] final해당 변수나 객체를 초기화한 이후에는 절대로 바꾸지 못하도록 선언하는 것 초기화가 되고 나면 그 이후에는 절대 값을 바꿀 수 없다. 당연히 클래스에서 상속, 확장 불가이고 메소드는 오버라이딩은 불가, 오버로딩은 가능하다.메모리에 올라간다. ※ [ 면접을 위한 CS 전공 노트 지식 ]→ 프로세스의 메모리 구조 중 const(java에서 C언어와 비슷한 의미)는 Data영역에 Bss Segment와 Data Segment로 나누어진다고 한다. 그러나 java의 final은 Data영역으로 메모리가 할당되는 것이 아니라 힙에 할당된다. 책이 틀린 것은 아니고 Java입장에서는 잘못됐다고 할 수 있다. static선언을 하게 되면 그 위치에 상관없이 프로그램의 시작부터 끝까지 메모리에 할당돼 있으면서 .. [ 직렬화(serialize) ] [ 역직렬화(Deserialize) ] Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용할 수 있도록 바이트 스트림(stream of bytes) 형태로 연속적인데이터로 변환하는 포맷 변환 기술 시스템적인 방식 : JVM의 힙(heap) 혹은 스택(stack) 메모리에 상주하고 있는 객체 데이터를 직렬화를 통해 바이트 형태로 변환하여 데이터베이스나 파일과 같은 외부 저장소에 저장해두고, 다른 컴퓨터에서 이 파일을 가져와역직렬화를 통해 자바 객체로 변환해서 JVM 메모리에 적재하는 것으로 보면 된다. → 다른 곳에서 사용할 수 있도록 Byte로 변환해준다고 이해했다. 즉 직렬화는 Object → Byte, 역직렬화는 Byte → Object 직렬화 사용처휘발성이 있는 캐싱 데이터를 영구 저장이 필요할 때 사용할 수 있다.. [ Java ] vs [ SQL ] DB에서 결과값을 바로 출력하는게 효율적인가JAVA에서 가공해서 출력하는게 효율적인가 각각의 장단점이 있다. SQL장점 ● 빠른 성능: 데이터베이스는 대용량 데이터 처리 및 쿼리 최적화에 최적화되어 있어, 필요한 데이터를 빠르게 추출할 수 있다. ● 네트워크 트래픽 감소: DB에서 필요한 데이터만 가져오므로, 네트워크를 통해 전달되는 데이터 양이 준다. ● 단순한 JAVA 코드: 데이터베이스에서 미리 가공된 데이터를 가져오기 때문에 JAVA 코드가 단순해진다. 단점● 복잡한 쿼리 ● 유지보수 어려움 : 복잡한 비즈니스 로직을 SQL에 포함시키면, 추후 변경 시 유지보수가 어려워진다.● 제한된 DB 기능 : 특정 데이터베이스는 복잡한 데이터 가공 기능이 부족할 수 있다.. 이전 1 2 다음