Language/Java2024. 6. 24. 22:55[JAVA] 불변객체

기본형: 하나의 값을 여러 변수에서 절대로 공유하지 않는다참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다참조형 변수는 참조값을 복사해서 대입하기때문에 여러변수에서 얼마든지 같은 객체를 공유할 수 있다.객체의 공유는 필요할 때도 있지만 때로는 객체의 공유로 인하여 사이드 이펙트를 만드는 경우도있다.Ex)예상치 않은 참조로 인해서 기존의 참조변수의 값이 변경되어 사이드이펙트가 발생되는경우Address addressA = new Address(); Address b = addressA;위 코드가 객체의 공유를 의미하며 객체의 공유는 아래와 같은 사이드 이펙트를 유발할 수 있다.public static void main(String[] args) { Address addressA ..

[JAVA] 래퍼 클래스
Language/Java2024. 6. 24. 22:53[JAVA] 래퍼 클래스

기본형의 한계객체가 아니기때문에 메서드를 제공할 수 없다null값을 가질 수 없다래퍼 클래스 생성 - 박싱기본형을 래퍼클래스로 변경하는 것을 박싱이라고 한다Integer.valueOf(10)을 하면 Integer객체에 들어있는 값을 꺼낼 수 있다.Integer.valueOf()에는 성능최적화가 되어있는데 String pool과 같이 -128~127범위의 숫자는 pool에 미리 생성해두고 가져와서 사용한다.때문에 아래와 같은 실행결과를 얻는다public static void main(String[] args) { Integer i1 = Integer.valueOf(127); Integer i2 = Integer.valueOf(127); System.out.println(i1 ==..

[Java] Enum타입
Language/Java2024. 6. 18. 15:16[Java] Enum타입

열거형을 배우기 이전에 왜 열거형이 나오게 되었고, 열거형이 아닌 문자열을 사용했을 때, 상수를 사용했을때와의 차이를 알아보자 문자열로 구현먼저 회원등급별로 할인을 적용하는 메서드를 짤 때 문자열로 회원의 등급을 구분해보자public int discountPrice(String grade, int price) { int ratio = 0; if (grade.equals("SILVER")){ ratio = 10; } else if (grade.equals("GOLD")) { ratio = 20; } else if (grade.equals("DIAMOND")) { ratio = 30; } else { ..

[Java] - Generic
Language/Java2024. 6. 15. 21:31[Java] - Generic

제네릭이 탄생하게 된 이유만약 프로그래밍 중에 타입 별로 값을 할당하고, 보관하고, 조회하는 기능이 필요하다고 가정해보자개발자는 Integer타입, String타입, Double타입 등 먼저 기본형에 맞는 Wrapper클래스를 먼저 만들어 줄 것이다.하지만 Member, Item과 같이 프로그램 개발중에 만들어지는 인스턴스 타입도 모두 만들어야하는 안타까운 일이 발생하게 된다.public class IntegerBox { Integer value; public void setValue(Integer value) { this.value = value; } public Integer getValue() { return value; ..

[Java - 자료구조] Set인터페이스
Language/Java2024. 6. 12. 23:35[Java - 자료구조] Set인터페이스

SetSet은 유일한 요소들을 갖는 컬렉션이다.특징유일성: Set에는 중복된 요소가 존재하지 않으며 요소를 추가할 때 이미 존재하는 요소면 무시한다순서 미보장: 대부분의 셋 구현은 요소들의 순서를 보장하지 않는다빠른 검색: Set은 요소의 유무를 빠르게 확인할 수 있도록 최적화 되어있다.보통 중복을 허용하지 않으면서 요소의 유무만 확인할 경우에 사용된다.import java.util.Arrays; public class MyHashSetV0 { private int[] elementData = new int[10]; private int size = 0; public boolean add(int value) { if (contains(value)) { ..

[JAVA - 자료구조] ArrayList vs LinkedList
Language/Java2024. 6. 9. 17:32[JAVA - 자료구조] ArrayList vs LinkedList

직접 구현한 ArrayList와 LinkedList비교 EXAMPLE기능ArrayListLinkedList앞에 추가(삭제)O(n) - 1369msO(1) - 2ms중간 추가(삭제)O(n) - 651msO(n) - 1112ms뒤에 추가(삭제)O(1) - 2msO(n) - 2195ms인덱스 조회O(1) - 1msO(n) - 평균 438ms검색O(n) - 평균 115msO(n) - 평균 492ms자바의 ArrayList와 LinkedList비교기능ArrayListLinkedList앞에 추가(삭제)O(n) - 106msO(1) - 2ms중간 추가(삭제)O(n) - 49msO(n) - 1112ms뒤에 추가(삭제)O(1) - 1msO(1) - 2ms인덱스 조회O(1) - 1msO(n) - 평균 438ms검색O..

[JAVA - 자료구조] LinkedList
Language/Java2024. 6. 9. 17:30[JAVA - 자료구조] LinkedList

ArrayList의 단점배열은 필요한 배열의 크기를 미리 확보하기때문에 나머지 공간은 사용되지 않고 낭비된다데이터의 추가와 삭제가 어려우며 이로인해 성능이 좋지않다낭비되는 메모리 없이 필요한만큼의 메모리만 사용하고 데이터를 중간에 추가하거나 삭제할 때도 효율적인 자료구조가 바로 노드와 연결이다노드와 연결의 '노드'는 내부에 저장할 데이터인 item과 다음으로 '연결'할 노드의 참조인 next를 가지고 있다.Node클래스public class Node { Object item; Node next; public Node(Object item) { this.item = item; } @Override public String toStrin..

Language/Java2024. 6. 9. 17:29[JAVA] 익명 클래스

anonymous class - 지역 클래스이지만 이름이 없다는 의미를 가지고있다보통의 클래스나 지역 클래스를 사용하기 위해서는클래스를 선언클래스를 new로 생성위와 같이 두 가지의 과정을 거쳤다.===익명 클래스를 사용하면 클래스의 이름을 생략하고, 클래스의 선언과 생성을 한번에 처리할 수 있다===익명 클래스 사용 전public class AnonymousOuter { private int outInstatnceVar = 3; public void process(int paramVar) { int localVar = 1; class LocalPrinter implements Printer{ int value = 0; ..

image