공부 STUDY/JAVA

    로깅(Logging)이란?

    운영 중인 웹 어플리케이션이 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때 당시의 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생했거나, 중요 기능이 실행되는 부분에서는 적절한 로그를 남겨야한다. 로깅이란? 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동. 프린트 줄 넣기(printlning)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다. 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야한다. 일반적인 로그 기록의 이점 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다. 로그는 성능에 관한 통계와 정보를..

    [JAVA] 단위 테스트 | JUnit이 무엇일까?

    [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)란 무엇일까? | 쓰레드와 메서드, 동기화

    [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

    [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를 통해 하나씩 뽑아내는 식이다. 여기서 순서..

    [JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?

    [JAVA] 자료구조 - List | ArrayList, LinkedList 차이는 무엇일까?

    List는 자바의 자료형 중 하나이다. 배열과 비슷하지만 명확한 차이점이 있다. 1. 크기를 자유롭게 설정 가능 - 배열은 처음 크기를 설정하고 나서부터는 크기 설정이 불가능하지만 리스트는 삽입과 삭제로 원하는대로 크기를 변경할 수 있다. 2. 배열은 직접 액세스(Direct access), 순차 액세스(Sequential Access) 모두 가능 | List는 순차 액세스만 가능 직접 액세스(Direct Access)는 배열의 값으로 바로 접근하는 것을 말하고 순차 액세스는(Sequential Access)는 처음부터 시작해 배열의 특정 값까지 접근하는 것을 말한다. 당연히 직접 액세스가 훨씬 더 빠르게 접근할 수 있기 때문에 배열 안에 값을 넣거나 가져올 때는 Array가 List보다 더 빠르다. 정..

    [JAVA] 제네릭 Generic

    Generic Box 클래스 public class Box { private Object obj; public void setObj(Object obj){ this.obj = obj; } public Object getObj(){ return obj; } } BoxExam 클래스 public class BoxExam { public static void main(String[] args) { Box box = new Box(); box.setObj(new Object()); Object obj = box.getObj(); box.setObj("hello"); String str = (String)box.getObj(); System.out.println(str); box.setObj(1); int val..