전체 글
-
컬렉션 List - LinkedList백엔드/자바 2020. 8. 16. 03:57
연결리스트(LinkedList)의 등장 배경 기존의 ArrayList의 경우 이전 글에서 언급했듯이 단점이 존재한다. 우선 배열이 확장될 때마다 새로운 배열을 생성해서 복사하는 과정을 지속한다. 그렇다보니 실행 속도에서 손해를 본다. 만약 배열 크기를 미리 크게 잡으면 메모리 낭비가 생긴다. 또한 배열의 중간 데이터를 추가, 삭제할 경우 데이터 이동이 일어나 실행 시간이 오래 걸린다. ArrayList는 배열을 기반으로 하다보니 ArrayList 또한 배열의 단점을 그대로 가져간다. 이러한 ArrayList의 단점을 보완하는것이 연결리스트(LinkedList)다. 연결리스트(LinkedList)란? 연결리스트란 불연속적으로 존재하는 데이터를 서로 연결(link)한 형태로 구성된 리스트를 말한다. 이렇게 ..
-
컬렉션 List - ArrayList백엔드/자바 2020. 8. 16. 03:17
ArrayList의 정의와 장점 컬렉션 프레임워크에서 가장 많이 사용되는 클래스로서 List 인터페이스를 구현한 클래스다. List 인터페이스를 구현했기에 데이터를 저장할 때 저장 순서가 유지되고 데이터 중복을 허용한다. 간단히 생각하면 우리가 배운 배열의 업그레이드 판이라고 생각하면 편하다. 실제로도 데이터의 저장공간으로 배열을 사용하며 배열을 기반으로 한다. ArrayList는 미리 배열의 크기를 입력할 필요가 없고 (물론 미리 입력해서 크기를 지정할 수 있지만, 그 크기를 초과해도 자동으로 배열을 확장해준다.) 한 개의 ArrayList에 다양한 자료형을 동시에 저장할 수 있다. ArrayList의 자료 저장 및 삭제 방식 ArrayList는 객체(Object) 배열을 이용해 데이터를 순차적으로 저..
-
컬렉션 프레임워크(collection framework)백엔드/자바 2020. 8. 16. 02:21
컬렉션 프레임워크의 필요성 자바를 배우기 시작하면 데이터 관리를 위한 기능인 배열을 배우게 된다. 하지만 배열은 사용하다보면 여러 면에서 한계가 드러난다. 그 중에서 가장 큰 한계 중 하나는 배열을 선언시 크기를 미리 지정해야한다는 것이다. 예를 들어 위와 같이 정수형 데이터 3개를 넣을 수 있는 배열을 선언했다고 가정해보자. 여기서 3개의 정수형 데이터까지는 정상적으로 입력되지만, 4개부터는 컴파일 오류를 발생시킨다. 자바를 이용해 계속 개발하다보면 배열의 크기를 미리 가늠할 수 없는 경우가 더 많다. 그럴때마다 별도의 처리를 해주는 등의 불편함이 발생한다. 또한 배열은 단 한가지 타입의 데이터만 입력이 되므로 이러한 점도 불편함을 발생시킨다. 이러한 배열의 한계로 인해 데이터를 다루기 위한 컬렉션 프..
-
오토박싱과 언박싱 (autoboxing & unboxing)백엔드/자바 2020. 8. 14. 17:57
오토박싱과 언박싱의 필요성 JDK 1.5 기본자료형과 참조형 간의 연산이 불가능했다. 그래서 기본형을 항상 래퍼클래스로 만들어서 연산해야 했다. 하지만 이제는 그럴 필요가 없다. 컴파일러가 알아서 해주기 때문이다. 이 과정을 거치는 것을 오토박싱, 언박싱이라 한다. 그리고 이 둘은 정반대의 기능을 한다. 오토박싱과 언박싱이란? 오토박싱 (기본형 값을 래퍼클래스의 객체 즉 참조 자료형으로 바꿔주는 것) 우리가 기본형으로 데이터를 입력했을 때, 이 자료가 참조형 자료로 바뀔 필요가 있을 경우 컴파일러가 알아서 바꿔주는 것을 오토박싱(autoboxing)이라 한다. 언박싱 (우리가 래퍼클래스의 객체 즉 참조 자료형을 기본형으로 바꿔주는 것) 우리가 참조형으로 데이터를 입력했을 때, 이 자료가 기본형 자료로 바..
-
문자열을 숫자로 바꾸기(valueOf, Parse)백엔드/자바 2020. 8. 14. 17:45
문자열을 숫자로 바꾸기 문자열을 숫자로 바꾸는 방법은 두 가지가 있다. 일반 기본 자료형으로 바꾸는 것과 래퍼 클래스형으로 바꾸는 것이다. 문자열 → 기본자료형 (parse) 기본 형식은 다음과 같다. 기본 자료형 + 변수명 = 래퍼클래스명.parse래퍼클래스명(텍스트); 각 자료형 별로 보면 아래와 같다. 문자열 → 기본자료형 byte A = Byte.parseByte("100") ; short A = Short.parseShort("100") ; int A = Integer.parseInteger("100") ; long A = Long.parseLong("100") ; float A = Float.parseFloat("100") ; double A = Double.parseDouble("100") ..
-
래퍼클래스 (wrapper) 클래스백엔드/자바 2020. 8. 13. 05:49
래퍼클래스란? 객제지향에선 모든 것을 객체로 다뤄야 한다. 하지만 일부 기본 자료형(primitive type)는 객체가 아니다. 그래서 이러한 기본 자료형을 객체로 다뤄주기 위해서 래퍼 클래스를 사용해야 한다. 미리 입력된 래퍼 클래스를 이용하면 기본 자료형을 객체로서 다룰 수 있다. 우선 예시부터 보면 다음과 같다. public static void main(String[] args) { Integer A1 = new Integer(5); // Integer객체 생성하면서 정수 5 입력 Integer A2 = 5; // Integer 자료형인 참조 변수에 5 저장 Integer A3 = 5; // Integer 자료형인 참조 변수에 5 저장 System.out.println(A1==A2); // fa..
-
java.lang 패키지 - StringBuffer 클래스백엔드/자바 2020. 8. 13. 05:47
StringBuffer란? 앞서 포스팅한 String클래스는 변경이 불가능한 immutable 자료형이다. 반면 StringBuffer클래스는 mutable자료형이다. String 클래스의 인스턴스는 가진 텍스트를 변경할 때마다 새로 인스턴스가 생성된다. 하지만 StringBuffer는 텍스트를 변경해도 해당 인스턴스가 새로 유지 된다. 그래서 텍스트 변경이 잦은 작업을 위해서는 String보다는 StringBuffer가 더 유리하다. StringBuffer의 구조 StringBuffer은 String과 마찬가지로 클래스 내부에 문자형 배열 ( char[ ] )참조 변수를 갖는다. 이 배열의 크기는 StringBuffer를 생성자를 이용해 생성할 때 결정된다. 변수 sf1과 같이 인스턴스를 생성할 때 따..
-
java.lang 패키지 - String 포맷, 변환백엔드/자바 2020. 8. 13. 05:24
문자열 포맷 문자열 포맷이란 형식화된 문자열을 만드는 것이다. format( ) 메서드를 사용하면 된다. 형식은 다음과 같다. "String.format("출력할 텍스트", 포맷으로 넣어줄 텍스트)" 예제를 보면 더 쉽다. public static void main(String[] args) { String A = String.format("저는 %d학년 %d반 %s입니다.", 3, 3, "학생"); // 첫번째 파라미터에 출력할 텍스트 값을 넣는다. // 이때 텍스트 내에서 포맷팅할 텍스트 자리엔 %d(숫자), %s(문자열) 등을 미리 배치한다. // 그 다음은 포맷 문자를 넣어준 만큼 파라미터로 문자나 숫자를 입력해준다. System.out.println(A); // "저는 3학년 3반 학생입니다."..