반응형
목록
간단하고 쉽게/JAVA (21)
[꼼꼼한 개발자] 꼼코더
나는 문득 이런 생각이 들었다 "동기화는 '충돌방지' 원자적 연산도 '충돌방지' 그럼 동기화 == 원자적 연산 같은 말 아니야?" 그래서 나름 찾아보고 글을 적어본다! ♻️ 동기화 멀티스레드 환경에서 여러 스레드가 공유하는 데이터를 안전하게 접근하고 조작하기 위해 사용하는 기술. 동기화는 공유 데이터에 접근하는 스레드들이 서로 충돌하지 않도록 해주는 역할을 한다. ⚛️ 원자적 연산 한번에 실행되거나 실행되지 않는 연산을 의미. 원자적 연산은 연산이 실행되는 도중에 다른 스레드에 의해 방해받지 않는 것이 보장되어야 하며 실행결과도 항상 일관성이 있어야 한다. 👀차이점 동기화와 원자적 연산은 비슷한 개념이지만, 같은 의미는 아니다. 예를 들어, "i++" 연산은 하나의 단위 연산이 아니므로( 현재 i의 값을..
📚자바 컬렉션(Collection)이란? 자바 컬렉션(Collection)은 객체를 모아 놓은 것을 표현하는 자바 API. 자바에서 제공하는 컬렉션은 다양한 형태와 성격을 가지고 있으며, 대표적인 것으로 List, Set, Map 등이 있다. 🚂 List 순서가 있는 데이터의 모음 중복된 데이터를 허용. ArrayList, LinkedList 등의 구현체가 있다. 🍽️ Set 순서가 없는 데이터의 모음 중복된 데이터를 허용하지 않는다 HashSet, TreeSet 등의 구현체가 있다. 🗺️ Map Key-Value 쌍의 데이터를 저장하는 자료구조 Key는 중복될 수 없다. HashMap, TreeMap 등의 구현체가 있다. 추가적인 내용은 아래를 참고해보자. https://ccomccomhan.tisto..
🧑🏻🏫 간단 정리 JPA는 자바의 ORM기술을 쉽게 구현하도록 도와주는 API이다. JpaRepository를 상속하는 인터페이스에 메서드 이름만 적어놓으면 알아서 다 처리(구현체 생성, 쿼리문 구현 등)해주는 좋은 ORM이다. 메소드 이름은 findby(필드명), deleteby(필드명)처럼 메소드 명칭만 적어주면 개발자는 SQL을 작성하지 않아도 쿼리문을 만들어준다. 이때 엔티티라는 클래스를 이용하는데 객체를 이용하여 매핑을 처리하는 것이다. 어렵다면 엔티는 == 테이블 or 레코드라고 생각해 보자! 자세한 건 아래 글을 읽어 보도록 하자. 🧐JPA(Java Persistence API)란? 자바에서 객체를 데이터베이스에 저장하고 관리하기 위한 인터페이스와 기능을 제공하는 API. JPA를 사용하면..
🧹 간단 정리 MyBatis를 사용하면 DB를 쉽게 다룰 수 있다. 예시) preparedstatement처럼 쿼리문을 복잡하게 입력하지 않고 실제 쿼리문과 유사하게 작성할 수 있다. preparedstatement : "UPDATE users SET name =?, email =? WHERE id =?" MyBatis : UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id} MyBatis의 또 하나의 장점은 동적 쿼리 작성이 가능하다. MyBatis 사용 방법순서 : 의존성 설정 -> DB 설정 -> MyBatis 설정 -> Mapper 인터페이스 작성 -> XML 작성 -> MyBatis 사용 아래글을 보고나면 이해가 훨씬 더 잘 될 ..
🎭 형변환의 의미 Java에서 형변환이란 변수의 자료형을 다른 자료형으로 변환하는 것을 의미한다. 😮 명시적 형변환 연산 (Casting) 변수의 자료형을 강제로 변환하는 연산 강제로 형변환을 수행하기 때문에, 데이터의 손실이 발생할 수 있음 👨🏻💻 예제 코드 (변환할 자료형) 변수이름 double a = 3.14; int b = (int) a; // double 타입 변수 a를 int 타입으로 변환하여 변수 b에 대입 😷 암묵적 형변환(Promotion) 자료형의 크기가 작은 자료형에서 큰 자료형으로 자동 변환하는 것 데이터의 손실이 발생하지 않음 👨🏻💻 예제 코드 자료형 크기가 작은 변수이름 = 자료형 크기가 큰 값; int a = 10; double b = a; // int 타입 변수 a의 값을..
📚 Optional에 대하여 Java 8부터 도입된 Optional은 값이 없는 경우를 표현하기 위한 클래스이다. Optional 클래스는 제네릭을 사용하여 어떤 타입의 객체도 감싸서 담을 수 있다. Optional 객체는 값이 존재할 수도 있고, 없을 수도 있다. 이는 NullPointerException 예외를 방지할 수 있고, 코드의 안정성을 높이며 가독성을 향상시킨다. 🥜 Optional 객체 생성(이론) Optional 객체를 생성하려면, of(), ofNullable(), empty() 등의 정적 팩토리 메서드를 사용할 수 있다. of() 메서드 : 값이 null이 아닌 경우에만 Optional 객체를 생성 ofNullable() 메서드 : 값이 null인 경우에도 Optional 객체를 생성..
🙋🏻♂️ 간단정리 (활용조건) HashMap : 일반적으로 사용 일반적으로 빠르고 오버헤드가 적기 때문. LinkedHashMap : 삽입한 순서대로 키 정보를 얻고 싶을때 사용 TreeMap : 정렬된 순서대로 키 정보를 얻고 싶을때 사용 Hashtable : 병렬 처리를 하면서 자원의 동기화를 고려해야 하는 상황일 때 사용. 🔑 HashMap 검색과 삽입 : O(1) 시간이 소요. 키의 순서 : 무작위. 구현 : 연결리스트로 이루어진 배열. null : key와 null value를 모두 허용. ↔️ LinkedHashMap 검색과 삽입 : O(1) 시간이 소요. 키의 순서 : 삽입한 Key의 순서대로 정렬. 구현 : 양방향 연결 버킷(double-linked bucket)으로 구현되어 있다. 🌳 ..
👨🏻🏫 간단정리 ‘’가 들어간 자바 코드. ‘’ 안에 타입 파라미터가 위치한다. 클래스, 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용하여 컴파일 시 구체적인 타입이 결정될 수 있도록 도와주는 것. ❓ 제네릭(Generic)이란? 자바 5 부터 새로 추가된 기능. ‘’ 안에 타입 파라미터가 위치 컬렉션, 람다식(함수적 인터페이스), 스트림, NIO에서 널리 사용된다. 클래스, 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용하여 컴파일 시 구체적인 타입이 결정될 수 있도록 도와줍니다. 제네릭은 클래스와 인터페이스만 적용되기 때문에 자바 기본 타입(Primitive Type)은 사용할 수 없다. 😊 제네릭의 장점 1️⃣ 컴파일 시 강한 타입 체크를 할 수 있다. 컴파일 시 에러를 다 도출해..