Java 6

클래스, 객체, 인스턴스

암만 찾아봐도 다들 다르게 해석하고 다르게 말하는거같은데 결과적으로 정리해보자면 클래스 객체를 정의해둔 설계도 객체 클래스에 정의해둔대로 메모리에 생성할 대상 인스턴스 클레스에 정의된대로 메모리에 생성되는 과정 또는 실체 클래스는 말그대로 설계도정도로 생각하면 되고 객체는 그 설계도에 의해 만들어질 대상 그래서 인스턴스화한다고 표현함 인스턴스랑 객체랑 갘은 의미로 쓰는데 엄밀히 따지면 인스턴스는 메모리에 올라가있는 객체 또는 객체를 메모리에 올리는 과정정도로 볼수있는거 같다

Java 2022.10.06

Map

그냥 사용하지말고 상황에 맞게 Map을 사용하자! 우선 Map은 Key와 Value로 구성되어있다. Value는 중복될수있지만 Key값은 중복될수 없다. 다음 4종류를 구분해서 정리해보겠다. HashMap HashTable LinkedHashMap TreeMap HashMap 가장 기본이 되는 친구라고 본다. 저장순서가 없다. HashTable HashMap과 동일한 특징을 가지고있지만 Thread-Safe하여 동기화를 지원한다. LinkedHashMap 딱 이름만 봐도 알수있듯이 순서를 가지고있고, 메모리를 더 차지한다. TreeMap 이진트리로 되어있어서 데이터를 저장시 정렬되면서 저장이 되기때문에 시간이 좀 걸린다.

Java 2022.06.14

배열, List

배열과 리스트의 큰 차이점으로는 배열은 크기를 동적으로 변경할수없고 리스트가 동적으로 변한다. 그럼 배열과 리스트의 특징을 정리해보자면 배열 크기가 정해져있어서 크기를 처음에 정해줘야한다. 삭제를해도 그 공간은 삭제된 빈 공간으로 남아있다. 인덱스로 데이터가 관리된다. 유일한 식별자이다. List 크기가 동적이다. 따라서 리스트에 계속 추가를 하게되어 할당한 크기를 넘어서게되면 사이즈가 추가로 할당된다. 삭제를 하면 그 공간은 다른값으로 대체된다. 인덱스는 사실상 몇번째 데이터다 정도의 의미일뿐 그런데 리스트엔 두가지 종류가 있다. ArrayList, LinkedList... 두 종류의 리스트엔 큰 차이점이 있다. ArrayList는 인덱스가 순서대로 나열되어있거 그 안에 값이 있다고 하면, Linked..

Java 2022.06.11

자바 메모리구조 아주 간략하게

자바 메모리 구조는 이것저것 복잡하게 많겠지만 단순하게 요약하자면 힙영역, 스택영역, 메소드영역정도로 구분하면 될거같다. 메소드 영역 클래스, 인터페이스, static 변수 등을 저장하는 영역. 한마디로 JVM이 실행되면서 생기는 영역이다. 모든 스레드가 공유한다. 힙 영역 new를 통해 생성된 객체와 배열 인스턴스들이 자리잡고있는 영역. 물론 메소드 영역에 올라가있는 객체만 생성가능하다. 기본형 타입 데이터가 아니고 레퍼런스타입 객체들만 이용가능한 영역. 갈비지 컬렉터가 사용하지않는 데이터를 지워줘야만 힙 영역에서 사라진다. 모든 스레드가 영역을 공유한다. 스택영역 함수안에 잠깐 존재하다가 사라지는 지역변수같은 애들이 이용하는 영역 스택영역이란 이름답게 FILO이다. 사용되고 사라져 버리는 영역이고 기..

Java 2022.06.03

hashcode와 String 의equals 함수

hashcode와 equals 함수에대해 설명하라는 질문을 받았다. 이제와서 생각해보면 사실 정답을 알려준게 아닌가 싶다. 어쨌건 생각나는 질문이니 정리해보자. 난 사실 해시코드가 객체의 메모리 주소라고 생각했지만 아니라고한다. 정확히는 해시 알고리즘에 의해 생성된 해시값이라고 한다. 해시코드와 이퀄스 함수는 최상위 객체인 Object에 정의되어있기때문에 모든객체는 가지고있다고 보면된다. 자바는 해시코드가 같으면 같은 객체로 판단하고 다르면 다른 객체로 판단한다. 해시코드는 객체를 식별하기위한 고유한 값이다. 32비트 jvm은 절때로 중복되는 해시코드값이 나올수없다고하는데 64비트 jvm에서는 중복되는 해시코드값이 나올수도있다고한다. 그래서 같은 객체임을 확일할때는 해시코드와 이퀄스 함수를 둘다 확인하는..

Java 2022.06.02

SOLID 원칙

solid 원칙... 오늘 면접을 봤는데.. 분명 알던거였는데... 많이 찾아보고 공부했던건데... 왜 기억이 안나느냐~ 이말이야... 그런 의미로 정리해보기로했다. 단일 책임 원칙 (Single Responsiblity Principle) 개방 폐쇄 원칙 (Open Closed Principle) 리스코프 치환 원칙 (Liskov Substitution Principle) 인터페이스 분리 원칙 (Interface Segregation Principle) 의존 역전 원칙 (Dependency Inversion Principle) 앞자를 따서 solid 원칙이라고한다 하나씩 정리..를.. 해보까나 단일 책임 원칙 (Single Responsiblity Principle) 하나의 클래스는 하나의 책임만 지어..

Java 2022.06.02