Java
-
[Java] JVM 구조Java 2025. 1. 2. 10:18
[JVM에 대한 소개] JVM = Java Virtual Machine 1. JVM도 어쨌든 하나의 가상 머신이다소프트웨어적으로 구현된 가상 컴퓨터 한대라고 생각하면 된다 2. 컴파일된 바이트코드인 javac 를 실행시켜준다Java Byte Code를 OS에 맞게 해석 해주는 역할을 함Byte Code 는 기계어가 아니기 때문에 OS에서 바로 실행되지 않음이때 JVM은 OS가 ByteCode를 이해할 수 있도록 해석해준다하지만 JVM의 해석을 거치기 때문에 c언어 같은 네이티브 언어에비해 속도가 느렸지만JIT(Just In Time)컴파일러를 구현해 이점을 극복 3. Byte Code는 JVM 위에서 OS상관없이 실행된다Write Once Run Everywhere다양한 하드웨어, OS 위에서 구동될 ..
-
[Java] Persistence Framework (feat. JDBC)Java 2024. 12. 14. 20:23
[영속성] 永續 = 길 영 + 이을 속 영속성 = DB에 저장할 수 있게 하는 특성 영속성은 한자 뜻 그대로 데이터를 영원히 유지시킨다는 뜻이다자바 프로그램은 기본적으로 RAM에서 실행되기 때문에 프로그램이 종료되면 데이터가 사라짐하지만 우리가 만든 데이터를 DB(파일, 데이터베이스)에 저장하면 프로그램이 종료되더라도 데이터를 유지할 수 있음즉, 영속성은 데이터를 저장소(데이터베이스)에 보관하여 프로그램이 종료 후에도 유지하게 해주는 특징임 [영속성 API == JDBC] 영속성을 구현할 수 있게 도와주는 것이Java에서 기본적으로 제공하는 JDBC이다. JDBC는 영속성 프레임워크가 아니라 영속성을 구현하기 위한 저수준 API이다.JDBC는 영속성을 구현하는데 필요한 도구를 제공하지만,JDBC만을 ..
-
[Java] execute executeQuery executeUpdateJava 2024. 10. 2. 02:00
java.sql 패키지는 JDBC를 위한 패키지이다 [execute] boolean 타입 반환true이면 getResultSet을 통해 ResultSet을 얻을 수 있고false이면 반환된 ResultSet이 0개이거나 업데이트된 행 개수를 반환한거임(int) execute 메서드는 SELECT INSERT UPDATE DELETE등 모든 DDL문을 실행할 수 있음 [executeUpdate] INT 반환INSERT DELTE UPDATE등 업데이트된 레코드 건수를 반환하는 쿼리에서 사용SELECT 구문을 제외한 다른 구문을 수행할때 사용CREATE/DROP 관련 구문에서는 -1을 반환함 INSERT DELETE UPDATE인 SQL문을 실행메서드의 반환값은 해당 SQL문 실행에 영향을 받은 행 수를 반..
-
[Java] PreparedStatementJava 2024. 10. 1. 01:17
[Statement, PreparedStatement 동작방식] Statement와 PreparedStatement는 아래와 같은 공통적인 실행 과정을 거치게 된다1. 구문분석 및 정규화 : Query 문법 확인 및 DB, Table 존재여부 확인2. 컴파일 : Query 컴파일3. 쿼리 최적화 : Query 실행 방법의 최적 계획 선택 4. 캐시Query 최적화 단계에서 선택된 계획이 캐시에 저장되어 동일한 Query 실행시전 1~3 단계를 실행하지 않고 캐시를 통해 찾음 5. 실행 : Query가 실행된 값이 담긴 객체인 ResultSet을 사용자에게 반환 이때 Statement는 매번 Query를 실행 시 마다 1~5번까지의 과정을 반복하는데PreparedStatement는 최초 Query를 실행시..
-
[Java] JDBC와 드라이버Java 2024. 3. 3. 14:35
[JDBC = Java Database Connectivity] 영속성 구현을 위한 DB 접근, SQL 날리게 할 수 있는 자바 표준 API자바의 DB 접근 기술의 근간모든 Persistence Framework는 내부적으로 JDBC API 사용JDBC API는 Driver Manager를 사용하여 각 DB에 맞는 드라이버를 로딩, 해제개발자는 JDBC API를 사용하여 DB 연결DB 연결을 위한 connection 할당, 반환, 종료같은 부수적인 코드 증가이러한 복잡성을 줄이기 위해 persistence framework 등장 (MyBatis, JPA, Hibernate.. 등) 각 데이터베이스마다 커넥션을 연결하는 방법, SQL 쿼리 방법, 결과 응답 방법이 모두 다름 그래서 어떤 데이터베이스를 쓰던..
-
[Java] hashcode() and equals()Java 2024. 2. 19. 18:10
HashCode는 해시 함수에 의해 생성된 정수값임 그리고 얘는 HashTable에 특정 데이터를 저장할때 사용됨 A 저장해야하면 hashcode(A) 로 idx 받고 table[idx] = A 이렇게 저장하는거임 이게 검색이 O(1)이라 순차자료구조에 저장한다음 O(N) 걸려서 찾는거보다 훨나음 [Hashcode rules] 1. 만약 equals가 두 객체를 같다고 판단했으면, 두 객체의 hashcode도 같아야함 2. but 역으로 hashcode가 같다고 두 객체의 equals 결과가 true는 아니어도 됨 즉 실제 같은 객체는 아니지만 hashcode가 같을 수 는 있음 3. 만약 equals를 재정의하거나 새로 만든다면, hashcode함수도 재정의해야함 (1번을 위해) 만약 특정 객체의 해시..
-
[Java] Stack Queue를 쓰면 안되는 이유(ArrayDeque)Java 2024. 2. 19. 01:05
c++은 그냥 Stack Queue 쓰면 되는데 자바는 Stack Queue가 존재함에도 불구하고 쓰면 안된다 물론 ps 한정 ㅇㅇ 근데 차피 프젝할때도 쓸일이 없으니 그냥 쓰면 안된다고 생각하자 왜냐하면 stack queue 모두 vector를 상속해서 구현하는데 vector는 동기화를 지원하기 때문에 ps를 하는 내 입장에서는 추가적인 오버헤드만 ㅈㄴ 걸리고 시간초과 걸릴 확률만 높여주는 ps 에 있어 최대 단점만 다 가지고 있는 놈들이기 때문이다 즉 모든 메소드에 synchronized가 있기 때문에 단일쓰레드 환경에서는 성능이 떨어짐 하지만 ArrayDeque 는 동기화를 지원하지 않는다 그래서 싱글쓰레드 환경 즉 ps하는 입장에서는 더 빠를 수 밖에 없는거고 deque 특성 상 stack과 qu..