공부 STUDY
[자바/ 자료구조] 컬렉션 프레임워크 공부 전, 자료구조를 간단히 정리해보자!
컬렉션 프레임워크 공부 전 자료구조 개념 정리의 필요성을 느꼈다! 지금부터 간단하고 확실하게 개념을 짚고 넘어가보자! 배열 Array 같은 형의 데이터 타입을 메모리에 저장하는 선형적 자료구조 논리적 구조와 물리적 구조가 동일하다. -> 배열은 Fixed-length이다. (고정된 길이) -> 인덱스 연산이 가능하다. 데이터의 크기 만큼의 오프셋으로 요소의 위치 계산이 가능하다. 논리적, 물리적 주소가 동일하니까 계산 가능! -> Insert / Delete 에 필요한 연산이 배열 전체 요소의 개수에 의존한다. (n개에 Dependent 하다.) / O(n) -> ArrayList / Vector 연결 리스트 Linked List 데이터와 링크로 구성되어 있다. -> IO가 많이 일어나는 경우 사용하면 ..
[JAVA] Optional이란? | Optional 개념 및 사용법
1. Optional이란? Optional 개념 및 사용법 [ NPE(NullPointerException) 이란? ] 개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하려면 null 여부를 검사해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거롭다. 그래서 null 대신 초기값을 사용하길 권장하기도 한다. List names = getNames(); names.sort(); // names가 null이라면 NPE가 발생함 List names = getNames(); // NPE를 방지하기 위해 null 검사를 해야함 if(names != null){ names.sort(); } [ Optional이란? ]..
로깅(Logging)이란?
운영 중인 웹 어플리케이션이 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때 당시의 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생했거나, 중요 기능이 실행되는 부분에서는 적절한 로그를 남겨야한다. 로깅이란? 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동. 프린트 줄 넣기(printlning)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다. 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야한다. 일반적인 로그 기록의 이점 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다. 로그는 성능에 관한 통계와 정보를..
[JAVA] 단위 테스트 | JUnit이 무엇일까?
단위 테스트란? 단위 테스트(Unit Test)는 프로그램의 기본 단위인 모듈(Module)을 테스트하는 것이다. 구현 단계에서 각 모듈의 개발을 완료한 후 명세서의 내용대로 정확히 구현되었는지를 테스트하는 것이다. 테스트가 가능한 최소 단위로 나눠서 테스트를 수행하며 개발 수명주기(Development LifeCycle)의 정황과 시스템에 의존적이면서도 시스템의 다른 부분에서 격리하여 독립적으로 수행해야 하는 테스트이다. 단위테스트를 하기 위해서는 가짜 프로그램, 객체(Mock Object)를 만들어서 활용할 수 있으며, 정교하게 테스트 하기 위해서는 테스트 케이스(Test Case) 작성은 필수라 할 수 있다. 종류 : JUnit(Java), DBUnit(DB), CppUnit(C++), NUnit(..
[JAVA] 람다식(Lambda Expression)
람다식 람다식은 다른말로 익명 메소드라고도 한다. 인터페이스 중에서 메소드를 하나만 가지고 있는 인터페이스를 함수형 인터페이스라고 한다. 쓰레드를 만들때 사용하는 Runnable 인터페이스의 경우 run()메소드를 하나만 가지고 있다. Runnable을 이용하여 쓰레드를 만드는 방법 public class LambdaExam1 { public static void main(String[] args) { new Thread(new Runnable(){public void run(){ for(int i = 0; i < 10; i++){ System.out.println("hello"); } }}).start(); } } 쓰레드가 실행되면 쓰레드 생성자 안에 넣은 run()메소드가 실행된다. 자바는 메소드만 ..
[JAVA] 쓰레드(Thread)란 무엇일까? | 쓰레드와 메서드, 동기화
쓰레드란? 동시에 여러가지 작업을 동시에 수행할 수 있게하는것 동시에 여러가지 작업을 수행할 수 있습니다. 프로세스란 현재 실행되고 있는 프로그램을 말합니다. 자바 프로그램은 JVM에 위해 실행된다. 이 JVM도 프로그램중에 하나이다. 운영체제 입장으로 보면 자바도 하나의 프로세스로 실행을 하는 것입니다. 워드프로세서가 하나의 프로세스라면, 하나의 프로세스 안에서도 여러개의 흐름이 동작할 수 있다. 이것은 Thread라고 말을 합니다. 자바 그램이 여러개의 작업을 동시에 하게 만들고 싶다면 Thread를 공부해야 합니다. 쓰레드 만들기(extend Thread) 자바에서 Thread를 만드는 방법은 크게 Thread 클래스를 상속받는 방법과 Runnable인터페이스를 구현하는 방법이 있다. Thread를..
[JAVA] 어노테이션 (annotation) | 커스텀 어노테이션 만드는 방법을 알아보자
어노테이션 어노테이션은 클래스나 메소드위에 붙는다. @(at)기호로 이름이 시작한다. 어노테이션을 클래스나 메타코드에 붙인 후, 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션에 설정된 값을 통하여 클래스가 좀 더 다르게 실행되게 할 수 있다. 이런 이유로 어노테이션을 일정의 설정파일처럼 설명하는 경우도 있다. 어노테이션은 자바가 기본으로 제공해주는 것도 있고, 사용자가 직접 만들 수도 있다. 사용자가 직접 작성하는 어노테이션을 Custom 어노테이션이라고 말한다. 커스텀 어노테이션을 이용하는 방법 어노테이션을 정의한다. 어노테이션을 클래스에서 사용한다. (타겟에 적용) 어노테이션을 이용하여 실행. 패키지 익스플로러에서 [new - Annotation]을 이용하여 Count100이라는 어노..
[JAVA] IO 자바 입출력
자바 IO는 크게 byte단위 입출력과 문자 단위 입출력클래스로 나뉜다. byte단위 입출력클래스는 모두 InputStream과 OutputStream이라는 추상클래스를 상속받아 만들어집니다. 문자(char)단위 입출력클래스는 모두 Reader와 Writer라는 추상클래스를 상속받아 만들어집니다. 4가지 추상클래스(InputStream,OutputStreamReader,Reader,Writer)를 받아들이는 생성자가 있다면, 다양한 입출력방법을 제공하는 클래스입니다. 4가지 클래스를 받아들이는 생성자가 없다면, 어디로부터 입력받을 것인지, 어디에 쓸것인지를 나타내는 클래스입니다. 파일로 부터 입력받고 쓰기 위한 클래스 : FileInputStream, FileOutputStream, FileReader,..
[JAVA] 자료구조 - Map
Map 컬렉션 클래스 Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가진다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용한다. 여기서 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 합니다. Map이란? - Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다. - 맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다. -특징 1. 요소의 저장 순서를 유지하지 않음 2. key : 중복을 허용 X value : 중복은 허용 O put 자바의 맵(Map)중 가장 간단한 HashMap에 대해서 알아보자..
[JAVA] 자료구조 - Set | Hashset
Set을 지난번에 공부한 List와 비교해보자면 1. Set은 중복 값을 삽입할 수 없다. 2. Set은 특정한 순서를 가지고 있지 않다. 이제 예제를 통해 한번 알아보자. String 타입만 받는 HashSet을 선언한 뒤 set 안에 add 메소드를 사용해서 "a", "b", "b", "d" 총 4개의 값을 set 안에 넣었는데 set은 중복값을 허용하지 않기 때문에 b를 1번 넣건 200번 넣건 동일한 값은 하나만 들어가게 된다. 또한 삽입 시 순서가 없기 때문에 배열(Array)이나 List 처럼 get(인덱스)로 값을 가져올 수 없고 .Iterator를 통해 가져와야 하는데 set.iterator()로 set 값을 iterator에 담은 후 .next를 통해 하나씩 뽑아내는 식이다. 여기서 순서..