Java/Java Concept 17

[Java] HashMap, HashTable, ConcurrentHashMap 자료구조에 대해서 알아보자

오늘은 Map Interface의 구현체의 일종인 HashMap, HashTable, ConcurrentHashMap 자료구조에 대해 알아보려고 합니다. 싱글 스레드 환경에서만 사용하는 HashMap에 대해 먼저 알아보겠습니다. 1. HashMap key, value에 null값 허용 동기화를 보장하지 않기에 싱글 스레드 환경에서만 사용 HashTable, ConcurrentHashMap보다 데이터 검색 속도를 빠르지만, 신뢰성과 안정성이 저하됩니다. 이제 해시맵에 데이터를 쓰는 과정에 대해 알아보겠습니다. 먼저, 배열 tab이 비어있거나 길이가 0이면 resize() 메서드를 통해 배열의 크기를 조정 배열의 특정 index에 node가 없으면, 새로운 node 생성하여를 해당 index에 할당 해당 i..

Java/Java Concept 2024.01.22

[Java] EnumSet에 대해서

캡스톤디자인2 Allercheck 프로젝트에서 핵심 기능을 구현하기 위해 EnumSet을 활용하였습니다. 핵심 기능의 일부를 위해 EnumSet을 적용하였는데, 간략하게 설명드리자면 데이터베이스에 음식에 관한 알러지 정보를 저장하기 위해 사용하였습니다. JPA에서는 EnumSet 자료 구조에 JSON 직렬화, 역직렬화를 제공하지 않아 직접 이 기능을 구현해야 하는 번거로움이 있었습니다. 이제 EnumSet이 무엇이고 왜 사용하는지에 대해 설명드리겠습니다. EnumSet EnumSet은 Enum 클래스와 함께 작동하는 특수한 Set Collection입니다. Set 인터페이스를 구현하고 AbstractSet에서 확장됩니다. 인스턴스를 생성할 수 있는 여러 정적 팩토리 메서드가 포함된 추상 클래스입니다. A..

Java/Java Concept 2023.11.13

[Java] 객체지향 사실과 오해 1- 협력하는 객체들의 공동체

"객체지향이란 무엇인가?"라는 질문에 뭐라고 답할 것인가? "실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"입니다. 객체지향 프로그래밍이란 실제로 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업이기 때문에, 객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화입니다. 이러한 관점을 잘못됐고, 정작 실세계의 모방이라는 개념이 저도 납득이 잘 가지 않았습니다. 왜냐하면 예시를 들어 붕어빵을 제조하는 과정을 객체지향에 빗대어 설명하는데, 저희가 애플리케이션을 개발할 때 붕어빵을 만들진 않기 때문입니다. 그냥 객체지향을 쉽게 이해하기 위한 방안입니다. 또한 객체지향의 목표는 실세계의 모방이 아닌, 실세계의 창조입니다. 시대가 계속 바뀌면서, ..

Java/Java Concept 2023.03.10

[Java] HashMap, HashSet 개념정리

HashMap은 Map의 종류 중 하나인데, key값과 value 쌍으로 이루어진 데이터를 저장한다. Map과 HashMap의 차이는 map은 red-blcak-tree 알고리즘을 사용하고, Hashmap은 Hashtable을 이용해 key-value를 유지한다. key값은 중복이 불가능하지만, value값은 중복이 가능하다. 선언방법 HashMap 변수이름 = new Hashmap(); HashMap 메서드 정리 1. put(key, value) => key, value값 저장, 중복된 key에 대한 value는 마지막에 저장된 value값으로 update 2. putAll(Object) => 인자로 전달된 Map에 대한 모든 데이터를 저장한다. 3. get(Object key) => key에 해당하는..

Java/Java Concept 2022.10.31

ArrayList<E> 클래스 및 제네릭 함수 개념

ArrayList는 컬렉션 클래스 중 가장 많이 사용하는 함수이다. 컬렉션 프레임워크 ? 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 데이터르 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화해 클래스로 구현해 놓은 것이다. List 클래스의 특징 중복 저장을 허용한다. 저장 순서가 유지된다. ArrayList 클래스는 배열을 이용하기 때문에 인덱스를 활용해 요소 접근이 편리하다. ArrayList arrList = new ArrayList; arrList.add(40); arrList.add(20); arrList.add(30); arrList.add(10); // for 문과 get() 메소드를 이용한 요소의 출력 for (int i = 0..

Java/Java Concept 2022.08.13

메소드 오버라이딩(Method Overriding) 개념

메소드 오버로딩이랑 메소드 오버라이딩을 구분할 필요가 있다. 메소드 오버로딩 vs 메소드 오버라이딩 메소드 오버로딩이란 서로 다른 시그니처(매개변수 목록)를 갖는 여러 메소드를 하나의 이름으로 정의하는 것이다. 메소드 오버라이딩이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니처를 갖는 메소드로 다시 재정의 하는 것을 의미한다. 자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외하고 모든 메소드를 상속받는다. 이를 그대로 사용해도 되지만, 재정의해서 사용할 수도 있다. 상속받은 부모 클래스의 메소드를 재정의하기 위해 사용하는 것을 메소드 오버라이딩이라고 한다. 메소드 오버라이딩의 조건 자식 클래스 메소드의 선언부 = 부모 클래스 메소드의 선언부 메소드의 ..

Java/Java Concept 2022.08.09

상속(inheritance)

상속이란 기존 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것이다. 객체 지향 프로그래밍을 구성하는 특징 중 하나이다. 상속을 이용하면 기존 클래스의 모든 필드와 메소드를 물려 받아 새로운 클래스를 정의할 수 있다. 기존 클래스 : 부모클래스(parent class), 상위클래스(super class), 기초 클래스(base class) 새로운 클래스 : 자식클래스(child class), 하위클래스(sub class), 파생클래스(derived class) 상속의 장점 기존 클래스 재활용 계층적 관계 구성(상하관계 구분) 자식 클래스 사용법 (새롭게 만든 클래스) class 자식클래스이름 extends 부모클래스이름 즉 자식클래스 안에 부모클래스가 들어가있음을 확인할 수 있다. ※중요..

Java/Java Concept 2022.08.09

메소드의 구분(클래스 메소드, 인스턴스 메소드)

class LoginPage{ boolean success; //인스턴스 변수 void Login(){ success = true; } //인스턴스 메소드 static void classLogin(boolean success){ return success; } //클래스 메소드 } 반환형 앞에 static 키워드가 존재하면 클래스 메소드(static method)라 하며 그렇지 않으면 인스턴스 메소드(instance method)라고 한다. 그렇다면 이 둘의 차이는 무엇일까? 클래스 메소드는 인스턴스(객체)를 생성하지 않고도 바로 접근이 가능하다. System.out.println(LoginPage.classLogin(true)); // 클래스 메소드 LoginPage myLoginPage = new L..

Java/Java Concept 2022.08.09

필드의 구분(클래스 변수, 인스턴스 변수, 지역 변수)

자바에서 필드는 세 가지로 구분된다. 변수 생성시기 소멸시기 접근방법 클래스 변수 클래스가 메모리에 올라갈때 프로그램 종료시 클래스이름.변수이름 인스턴스 변수 인스턴스 생성시 인스턴스 소멸시 인스턴스이름.변수이름 지역 변수 블록 내에서 변수 선언시 블록을 벗어날시 변수이름 static int 변수이름 int 변수이름 //class 내에 사용하면 인스턴스 변수 + public class 내에 사용하면 지역 변수 클래스 변수는 모든 인스턴스(객체)가 같은 값을 공유하지만, 인스턴스 변수는 그렇지 않고 고유한 값을 지닌다. http://www.tcpschool.com/java/java_member_field 코딩교육 티씨피스쿨 4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파..

Java/Java Concept 2022.08.09

접근제어자 + 제어자 개념

접근 제어자 : 클래스의 접근 범위를 제한하기 위한 제어자이다. public : 접근제한 x protected : 같은 패키지 + 다른 패키지의 자식 클래스에서 접근 o default : 같은 패키지 내에서만 접근 o(자료형 앞에 아무 것도 쓰지 않았을 때) private : 같은 클래스에서만 접근 o 허용 범위 : public > protected > default > private 접근 제어자 같은 클래스 같은 패키지 자식 클래스 그 외 public o o o o protected o o o x default o o x x private o x x x 기타 제어자 final : 변경할 수 없는 상수(constant)를 의미한다. (c,c++ 관점에서 바라볼 때 const와 같은 의미이다) final을..

Java/Java Concept 2022.07.22