본문 바로가기

JAVA

(18)
[Java] Set HashSet 중복된 요소를 저장하지 않음 저장순서를 유지하지 않음. 순서를 유지하고 싶다면 LinkedHashSet 사용 TreeSet 이진 검색 트리라는 자료구조 형태로 데이터를 저장하는 컬렉션 클래스 이진 검색 트리 : 부모 노드의 왼쪽에는 작은 값의 자식 노드, 오른쪽에는 큰 값의 자식 노드 중복된 데이터 저장 X, 순서 X 단일 값 검색과 범위 검색이 매우 빠르다. 트리는 데이터를 순차적으로 저장하지 않고, 저장 위치를 찾아서 저장해야한다. 삭제하는 경우 트리 일부를 재구성해야하므로 linkedList보다 데이터 추가/삭제 시간은 더 걸린다. 대신, 배열이나 linkedList에 비해 검색과 정렬기능이 더 뛰어나다.
[Java] 리스트(List) ArrayList 읽기(접근 시간) 빠르다. 추가/삭제 느리다. 순차적인 추가/삭제는 빠르다. 비효율적인 메모리 사용 LinkedList 읽기(접근시간) 느리다. 중간 데이터 추가/삭제 빠르다. 단방향이라 데이터가 많을수록 접근성이 떨어진다. doubly linked list linked list는 단방향이기 때문에 다음 요소에 대한 접근은 쉽지만 이전 요소에 대한 접근은 어려운 점을 보완한 것. 이전 요소에 대한 참조가 가능하게 함 doubly circular linked list 첫번째 요소와 마지막 요소를 연결시켜 접근성을 보다 향상시킨 것 Stack과 Queue Stack 넣은 순서와 꺼낸 순서가 뒤집어진다. 구현 : ArrayList와 같은 배열기반의 컬렉션 클래스 활용 : 수식계산, 수식괄호검..
[Java] 컬렉션 프레임웍(Collections Framework) 컬렉션 프레임웍(Collections Framework) 데이터 군을 저장하는 클래스들을 표준화한 설계 컬렉션 : 다수의 데이터(데이터 그룹) 프레임웍 : 표준화된 프로그래밍 방식 핵심 인터페이스 1. List 순서 O, 중복 허용 O ex) 대기자 명단 구현 클래스 : ArrayList, LinkedList, Stack, Vector 등 * Vector는 컬렉션 프레임웍이 만들어지기 이전부터 존재하던 것이고, 호환을 위해 설계를 변경해서 남겨두었지만, 가능하면 사용하지 말고 ArrayList를 사용하자! 2. Set 순서 X, 중복 허용 X ex) 양의 정수집합, 소수의 집합 구현 클래스 : HashSet, TreeSet 등 3. Map 순서 X, 키는 중복 허용 X, 값은 중복 허용 O ex) 우편번..
[Java] 인터페이스(interface) 인터페이스(interface) 일종의 추상클래스 추상클래스보다 추상화 정도가 높아 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있다. class 대신 interface를 사용한다. interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수 목록); } 인터페이스의 상속 인터페이스는 인터페이스로부터만 상속받을 수 있다. 여러 개의 인터페이스로부터 상속을 받는 것이 가능하다. interface Movable { void move(int x, int y) } interface Attackable { void attack(Unit u); } interface Fi..
[Java] 추상클래스(abstract class) 추상클래스(abstract class) 미완성 메서드(추상메서드)를 포함하고 있는 클래스 상속을 통해서 자손 클래스에 의해서만 완성될 수 있다. abstract class 클래스이름 {...} 추상메서드(abstract method) 선언부만 작성하고 구현부는 작성하지 않은 채 남겨 둔 메서드 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 미완성 상태로 남겨둔다. (오버라이드 해서 사용하는 것과 뭐가 다르지? -> 굳이 추상메서드로 선언하는 이유는 자손클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다. 만일 추상메서드로 정의되어 있지 않고, 빈 몸통만 가지도록 정의되어 있다면, 상속받는 자손클래스에서는 이 메서드들이 온전히 구현된 것으로 인식하고 오버라이딩을 통해 자신의 클래스..
[Java] 다형성(polymorphism) 다형성(polymorphism) 여러가지 형태를 가질 수 있는 능력 자바에서는 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있다. Tv t = new CaptionTv(); Tv타입 참조변수로는 CaptionTv인스턴스 중에 Tv 클래스의 멤버들만 사용할 수 있다. CaptionTv c = new Tv(); //컴파일 에러 발생 자손타입의 참조변수로 조상타입의 인스턴스 참조는 불가능하다. 형변환 자손타입 -> 조상타입 : 형변환 생략 가능 자손타입
[Java] 상속(Inheritance) 상속(Inheritance) 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것 특징 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있다. 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 용이하다. 코드의 재사용성을 높이고 중복을 제거하여 프로그램의 생산성과 유지보수가 좋다. 구현 방법 새로 작성하려는 클래스 이름(자손 클래스) extends 상속받고자 하는 클래스 이름(조상 클래스) class Cat extends Animal { ... } 자손 클래스는 조상 클래스의 모든 멤버를 상속받는다. Animal ⊂ Cat - 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. (변수나 메서드) - 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. Dog라는 자손 클래..
[JAVA] DTO와 VO DTO (Data Transfer Object) 계층 간 데이터를 전달하는 객체로 로직을 갖고 있지 않은 순수한 데이터 객체이다. 데이터 전달 용도로만 사용하기 때문에, getter/setter 로직만 가지고 있다. setter의 경우 변조 가능성이 있어, 생성자로 값을 넣어주어 전달 과정에서 변조가 불가능 하도록 할 수 있다. public class UserDTO { private String name; private String id; public String getName() { return name; } public String getId() { return id; } public void setName(String name) { this.name = name; } public void setId..
Annotation 어노테이션 어노테이션은 프로그램에 추가적인 정보를 제공하는 메타 데이터의 일종이다. 사전적으로는 주석이라는 의미이다. Java의 어노테이션은 소스코드에 추가해 주석처럼 쓰이며 코드에 영향을 미치지는 않지만, 특별한 의미, 기능을 수행하도록 하는 기술이다. 보통 @ 기호를 앞에 붙여 사용한다. JDK 1.5버전 이상에서 사용이 가능하고, 클래스 파일에 임베드되어 컴파일러에 의해 생성되고 이후 JVM에 포함되어 동작한다. 어노테이션의 용도 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공 소프트웨어 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공 런타임시 특정 기능을 실행하도록 정보 제공 어노테이션 사용 순서 어노테이션 정의 클래스에 어노테이션 배치 코드가 실행되는 중 Reflection..
컬렉션(자료구조) Java 프로그래밍에서 배열을 고도화시켜서 컬렉션이라는 이름으로 참조형 자료구조를 제공하고 있다. 컬렉션은 참조형 변수만 저장함으로써 여러 기능을 제공한다. 컬렉션은 배열보다 다수의 참조형 데이터를 쉽고 효과적으로 처리할 수 있는 기능을 가지고 있다. 컬렉션은 참조형 변수를 저장한다. 컬렉션 기능 크기 자동조정, 추가, 수정, 삭제, 반복, 순회, 필터, 포함확인 등 컬렉션 종류 List : 순서가 있는 데이터의 집합. 데이터 중복 허용 (배열과 비슷) Queue : 원통처럼 한쪽에서 데이터를 넣고 반대쪽에서 뺄 수 있는 집합 (FIFO) Set : 순서가 없는 데이터의 집합. 데이터 중복 허용X. 집합과 비슷 (순서X, 중복X) Map : 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집..
배열(자료구조) Array 여러개의 변수를 모아 저장하고 싶을 때 배열이라는 변수에 저장한다. 여러개의 값들을 한꺼번에 넣거나 하나씩 넣을 수 있고, 꺼낼 때는 하나씩 꺼낼 수 있다. 자료구조 중 하나. 선언 방법 1. 타입 [ ] 변수 ; (일반적) int[] Array; 2. 타입 변수 [ ] ; int Array[]; 생성 new 명령을 통해 생성하고, [ ] 안에 크기를 지정한다. 사이즈를 지정해서 생성된 배열은 각 칸마다 순번이 있다. 순번은 0부터 시작. 배열 생성시 각 타입별 초기값으로 초기화 되어 채워진다. ※ 참조형 변수이기 때문에 실제 값을 가지고 있지 않고, 실제 값의 주소값을 저장하고 있다. int[] Array = new int[3]; 순회 배열의 값을 하나씩 꺼내서 사용하는 것 // 단건 조회 int[] ..
반복문 for문 특정 조건에 따라 연산을 반복 수행하고 싶을 때 사용 ※ 잘못 사용하면 무한루프에 빠짐! for(초기값; 조건문; 증가연산) { 연산 } // for 문 for(int i=0; i < 3; i++) { // 변수 i 값은 0 ~ 2 까지 반복 System.out.println(i + "번째"); // i 변수와 문자열 합치기 } // 출력 0번째 1번째 2번째 향상된 for문 소괄호 안의 값을 2개로 줄여주는 방법 연속된 변수목록을 출력할 때 사용한다. for(변수타입 변수명 : 목록변수) { 연산 } 목록변수는 배열! // 향상된 for 문 int[] numbers = {3,6,9,12,15}; for(int number: numbers) { System.out.print(number + " ..
조건문 if문 if(조건){수행하고 싶은 연산} 특정 조건에 따라 다른 연산을 수행하고 싶을 때 사용 소괄호 안의 조건이 true를 만족하면 중괄호 안의 연산을 수행한다. if(조건){수행 연산} else {수행 연산} if문 조건이 false인 경우 else의 중괄호 안의 연산을 수행한다. if(조건){수행 연산} else if(조건) {수행 연산} else if문 조건이 true인 경우 else if의 중괄호 안의 연산을 수행한다. 중첩 if(조건) if문, else if문, else문 안에 if문을 넣을 수 있다. (추천 X) switch문 switch문은 case문과 함께 사용하며 if문보다 가독성이 좋은 조건문 표현식이다. switch(피연산자) {case(조건) : (연산) } switch 피연산자가..
연산자 연산자와 피연산자 연산자 : 계산의 목적이 되는 것. 더하기, 빼기, 곱하기, 나누기 등 피연산자 : 계산할 때 계산의 대상이 되는 것. 숫자 연산자의 종류 산술 연산자 사칙 연산 및 비트 연산 사칙 연산 : + (덧셈) - (뺄셈) * (곱셈) / (나눗셈, 몫) % (나머지) 우선순위 연산 적용되어 곱셈, 나눗셈이 덧셈, 뺄셈보다 먼저 수행됨 비트 연산 : > (오른쪽으로 자리수 옮기기) 비교 연산자 값의 크고 작음을 비교하거나 같고 다름을 비교하여 참(true)/거짓(false) 값인 boolean 값을 출력한다. > (크다) = (크거나 같다) y) ? x : y; System.out.println(max); // 2 instance of 연산자 클래스와 관련됨. 피연산자가 조건에 ..
형변환 프로그래밍을 하다보면 문자열로 입력받은 변수를 숫자로 변환해서 계산하고 싶은 경우, 문자열에 숫자값을 추가하고 싶은 경우 등 변수형을 다른 형으로 변환이 필요한 경우가 많음 형변환은 주로 기본형 변수인 정수 ↔ 실수 ↔ 문자 들 사이에서 일어남 정수 ↔ 실수 간에 변환할때는 ({원하는 타입}) 명령을 통해 변환할 수 있습니다. (캐스팅: 명시적 형변환) 정수형 ↔ 실수형 Double, Float to Int (Int)캐스팅 방식으로 실수를 정수로 치환하는 방법. 이때 실수형의 소수점아래자리는 버려진다. double doubleNumber = 10.101010; float floatNumber = 10.1010 int intNumber; intNumber = (int)doubleNumber; // doub..
숫자와 문자 저장공간에 저장하는 값은 0과 1을 통한 숫자값을 저장한다. 문자를 숫자로 저장하는 방법에는 여러가지가 있다. 그 중 Java에서는 기본적으로 아스키코드라는 규칙으로 문자를 저장한다. 숫자 -> 문자 // 숫자 -> 문자 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int asciiNumber = sc.nextInt(); char ch = (char)asciiNumber; // 문자로 형변환을 해주면 숫자에 맞는 문자로 표현됩니다. System.out.println(ch); } } 문자 -> 숫자 // 문자 -> 숫자 import..