1. Java 개념 미국 Sun microsystem 社가 개발한 객체지향 프로그래밍 언어 참고로 sun microsystem oracle에 인수되었다. C, C++의 문법을 채용하되 포인터 및 다중상속에 대한 부분을 제거하여 비교적 러닝커브가 완화된 언어이다. 2
Java는 강형언어로, 컴파일 시 모든 변수의 type이 결정되는 언어이다.즉 처음 변수를 선언(int count, 자료형 - 변수)할 시점부터 해당 변수 type을 잘 설정해야 하고, 선언 이후엔 그에 알맞은 data만 저장할 수 있다.int count(int, do
Java에서 제시하는 조건문에는 if문과 switch문으로 두가지가 존재한다.※ python에서는 if문만 제시하는 것과는 차이가 있다.Java 조건문 - if/elif→ if a>b:→ elif a==b:Python 조건문 - if/else if→ if(a>b){ l
입력받는 메소드도 관련 class를 활용하는 것부터 시작한다.java.util.Scaneer → 입력 라이브러리Scaneer scan에 대한 class 선언, System.in을 활용하면 입력받을 수 있다.import java.util.ScaneerScanner sca
Java에서는 while, do-while, for문 형태로 반복문을 작성할 수 있다.※ python에서는 do-while 반복문을 제공하지는 않는다.while→ Java : while(i<9){logic}→ python : while i<9: logicdo
int\[] array = new int\[100];어떤 형태의 값을 저장할지 자료형 선언과 변수명 선언배열 역시 반드시 class로 부터 선언하고, new int100과 같이 배열 크기를 선언한다.int\[] array = new int\[](1,2,3,4,5);in
기존 for문에서 array 선형탐색, 탐색 후 값을 받아올 value를 선언하는 과정을 별도로 진행하는 것을 하나로 merge할 수 있도록 보완된 문법이다.for(int value:array){}:을 기준으로, 오른쪽에는 iterable(반복대상의 배열 및 객체)를
Java는 기본적으로 객체지향언어, 즉 특정 기능을 동작하는 객체를 생성한 후 긴밀하게 연결 및 상호작용을 통한 프로그램 동작을 구현하는 것이 핵심이다.객체를 만들기 위해선 반드시 클래스를 먼저 생성해야하고, 바로 여기서 파생되는 것이 객체가 된다.java projec
Class로 부터 파생된 여러 인스턴스가 있을때, 이 인스턴스를 구별하는 구별자, 즉 말 그대로 구별되는 속성들을 의미한다.객체를 구별할 수 있는, 속성값을 추가함으로써 Class로 부터 만들어지는 여러 인스턴스들을 구별할 수 있는 인자들을 일컫는다.Class에 속성값
사물을 객체지향관점에서 바라볼 때, class라는 틀에서 정의할 수 있는 사물의 특징은 필드와 메소드라 나눌 수 있다.이때 필드는 상태(속성값)를 의미하고, 메소드는 행동을 의미한다.이때 메소드의 입력인자를 통해 특정 연산 및 과정을 수행하여 출력값을 도출하게 된다.입
최초 선언 : String str = new String("Hello");이후 str은 String class에 내장된 메소드들을 사용할 수 있다.str.length(); 문자열 길이를 구한다.str.concat("str2"); 문자열을 붙여 출력하되, 기존 참조변수에
변수의 scope, 즉 변수를 사용할 수 있는 범위는 기본적으로 해당 블록 혹은 class 내부이다.위에서 가장 최상위 class인 test에서 선언된 변수 x는 해당 클래스 전 범위에 걸쳐 사용이 가능하고, 내부 main class의 value 매개변수와 result
enum, 서로 연관되어있는 상수들의 집합에 대해 선언할때 사용하는 자료형의 일종이다. 다른 변수들과는 달리 수정하거나 바꿀 수 있는 타입이 아니고, 선언된 값들에 대해 사용(공유)하기만 할 때 활용할 수 있는 자료형이다.기존 static final로 정의하여 반복적으
새로운 인스턴스를 만들때 사용되는 인자를 일컫는다.클래스를 만들고, 클래스 속성과 메소드에 접근하기 위해 참조변수에 인스턴스를 할당해주었다.이 class를 다른 참조변수가 가르키도록 인스턴스를 선언해줄때위와 같이 선언해주게 되고, 이때 new 연산자 다음에 사용된 Ca
객체 자신을 참조하는 키워드로, 명확하게 자신의 field 및 구성요소를 가르키도록 활용하기위해 사용한다. 아래 생성자의 인자 n을 받아와서 name field에 초기화한다고 가정해보자.이때 인자 n을 위 field의 name으로 선언해줄 수는 있으나, 이를 가독성을
동일한 이름의 메소드를 여러 개 정의하는 것을 의미한다.매개변수 개수나 type이 조금씩 다르지만, 비슷한 기능을 하는 메소드가 여러개 존재할 수 있는데, 이러한 메소드가 여러개 존재한다면 명확한 구분 및 사용이 어려울 수 있다.이와 같이 동일 이름으로 메소드를 여러개
class 파일들을 관리 및 유지하기 위해 사용하는 디렉토리, 즉 폴더의 일종이다.java 파일을 컴파일하게 되면 class가 생성되는데, 이 class들은 모두 개별적인 파일들이다.이때 관련한 파일들을 하나의 폴더, 즉 한 패키지 안에 넣어 관리하여 효율성을 높일 수
부모(상위) class의 속성과 메소드를 그대로 사용할 수 있도록 물려받는 과정이다.종속관계, 상위 class의 특징을 모두 보유하고 있는 하위 class가 존재할때 상위 class를 상속받았다고 일컫는다.예를 들어, Bus class와 Car class가 있다고 하자
클래스 내부에 선언한 메소드 및 속성들 중 외부에 노출시키지 않기 위해, 외부에서 사용하는 것을 허용하지 않을때 사용하는 입력인자이다.아래는 각 메소드 및 속성에 대한 허용 범위 순서에 따른 접근제한자이다.모든 경로를 통한 접근을 허용한다.같은 패키지, 다른 패키지라도
말 그대로 추상적인, 특정지지 않고 범위가 포괄적인 클래스를 일컫는다.부모 class로써 작용할 수는 있지만, 구체적이지 않은 특징으로 그것이 객체가 될 수는 없다.추상클래스는 보통 내부적으로 메소드가 abstract 키워드가 선언되어있다면, 해당 클래스도 이에 따라가
자식클래스에서 사용하는 부모클래스 생성자 키워드로, 부모클래스 생성자를 초기화하기 위해 사용한다.아래와 같이 최상위 부모 클래스인 Car와 내부적으로 생성자 Car()가 있다고 가정해보자.이때 부모 클래스인 Car의 자식 클래스 Truck를 선언해보고, 이에 대한 인스
부모가 가지고 있는 메소드와 똑같은 이름, 형태의 메소드를 자식이 가지고 있는 상황에서 자식 클래스의 메소드이 호출되었을때 부모클래스 메소드 호출이 생략되는 과정을 의미한다.부모가 물려준 기능을 그대로 사용하기 보다는, 자식에서 재정의하여 사용하는 관점에서 이용된다.오
부모(넓은) 클래스가 자식(작은) 클래스를 가리키고 있는 상황에서, 부모클래스 형태의 인스턴스가 자식 인스턴스까지 참조하고자 할 때 이루어지는 과정을 형 변환이라 한다.아래 부모 클래스와 자식 클래스와 함께 각각 run과 alert 메소드가 있다고 가정해보자.이때 위
class와 같은 하나의 파일, 형태의 일종이다.예를 들어, 우리가 TV를 만든다고 할 때 가장 먼저 이 기능만은 꼭 넣겠다, 반드시 필요한 기능을 고민해본다고 하자.TV→ 켜고 끄는 기능→ 채널 변경 기능→ 볼륨 조절 기능이러한 꼭 필요한 기능들에 대해 구현하지는 않
기존 인터페이스에서는 abstract method(명세서만) 선언만 할 수 있었지만, java 5부터는 default 및 static method를 선언할 수 있게 되었다.이후 해당 메소드에 대한 구현과 오버라이딩 또한 가능해졌다.말 그대로 interface에서 abs
클래스 내부에 선언된 클래스를 일컫는다.인스턴스 변수, 즉 클래스의 field 영역에서 클래스가 선언되는 경우로 자료형 자체가 클래스 형태이다.위와 같이 type 자체가 class이다.이 클래스 내부에 선언된 변수나 메소드를 활용하기 위해서는 아래와 같은 과정을 거친다
던진다, 발생한 예외 상황을 다른 클래스로 던진다는 의미의 키워드이다.exception 처리에 대한 부분을 해당 오류가 발생한 부분이 아닌, 해당 오류를 발생시킨 함수(혹은 그러한 인자를 전달한 클래스 등)에 exception 처리를 넘기는 키워드이다.throws 키워
예외처리를 하는 방식에 대해 java가 제공하는 exception을 사용할 수도 있지만, 사용자가 직접 정의해서 사용하는 exception을 활용할 수도 있다.이 사용자 정의 exception의 종류는 두가지가 존재한다.Exception class를 상속받아 사용한다(
object class, Java에서 사용되는 모든 클래스에 적용할 수 있는 최상위 클래스이다. 기본적으로 한 객체 및 클래스 선언 시 자동적으로 object 및 class를 상속받는다.이에 따라 모든 클래스는 object class가 가지고 있는 메소드를 상속받아 사
javascript에서 해당 npm 패키지를 설치하고, 패키지에 내장되어있는 여러가지 도구와 기능들을 사용할 수 있듯이, java 역시 이와 동일하게 여러 도구가 존재하는 패키지를 사용할 수 있다.그 중 대표적으로 java.lang 패키지가 있는데, 아래와 같은 도구들
1. java util 패키지 java.lang 패키지와 더불어 활용도가 높은 패키지이다. 날짜, 자료구조에 사용할 수 있는 collection 클래스 등을 제공한다. 1-1. Date 클래스 Date 클래스는 현재 지원하지 않는 클래스로, calender 클래스
선언할 때는 가상의 type, 활용할 때 구체화클래스를 generic, 일반화한다는 의미이다.object type을 인자로 받고 이를 return하는 특정 클래스 및 메소드의 type을 임의의 클래스로 바꾸고, 이후 활용할 때마다 직접 해당 type을 지정해주는 것을
set 자료구조 자체는 중복없고 순서가 없이 자료를 담는 구조이다.다만 set 자체는 인터페이스이기 때문에 객체생성이 불가능하고, set 자료구조를 활용한 HashSet과 같은 별도의 객체를 생성해야 메소드 사용이 가능하다.set 자료구조는 인터페이스 자체가 임의의 클
데이터의 중복 상관없이 순서가 존재하도록 저장하는 자료구조를 말한다.Java에서의 배열은 list와 다른 개념이며, list가 저장공간이 필요에 따라 확장이 될 수 있다는 점과 달리 배열은 한 번 선언 시 크기가 변하지 않는다.파이썬에서는 list와 배열을 동일한 개념
key, value를 쌍으로 저장하는 방식의 자료구조를 말한다.key를 이용하여 value를 탐색하여, key는 구별자로써 중복될 수는 없다.마찬가지로 Map 자체는 인터페이스이기 때문에 자체적인 인스턴스는 생성할 수 없고, HashMap을 통해 객체를 구성한다.이 역
Java.util package에서 제공하는 클래스로, 시간을 구해준다.지역화를 고려하지 않은 클래스로 현재 대부분 deprecated된 기능들이 존재하며, 이에 대해 개선된 클래스로 calender 클래스를 제공한다.String이 오버라이드된 상태로 date, dat
말 그대로 Input, Output에 대한 클래스와 메소드를 제공해주는 패키지를 일컫는다.크게 Byte 단위의 입출력과 Char 단위의 입출력을 받는 클래스로 나뉜다.Byte I/O : InputStream, OutputStream을 상속받아 생성되는 추상클래스이다.C
Java IO객체는 인스턴스를 만들고 모두 사용하게 되면, 해당 객체를 폐기하는 class 메소드를 사용해야 한다(즉 폐기를 해야함).다만 이를 작성하지 않더라도, exception이 발생하지 않았을 경우 자동으로 해당 객체를 종료시킬 수 있는 구문으로 작성할 수도 있
일전 file type과 마찬가지로, char(문자열) type의 변수를 입력받을 수도 있다.character에 대한 입출력 클래스는 Reader, writer로 명명이 끝난다.기본적으로 I/O Stream은 decorator pattern 이므로, 객체에 또다른 객체
annotation, 간단하게 @표시를 의미한다.Java 5부터 새롭게 추가된 기능으로, 클래스 및 메소드에 @표시를 첨가하여 소스코드에 메타코드(세부적인 정보)를 기재하는 도구를 뜻한다.클래스 컴파일 및 실행 간 어노테이션에서 설정한 값을 참조하여, 클래스가 특정적으
Thread, 프로세스 내부적으로 동작하는 여러 개의 하위 프로세스를 의미한다.운영체제(OS)는 하드웨어를 사용할 수 있도록 내부적인 프로그램을 동작하게하는 주체이자 처리시스템이다.Java를 실행하도록 하는 JVM은 하나의 운영체제처럼 작동하여, 이와 유사한 원리로 여
여러 개의 스레드가 동일한 객체를 참조 및 공유하고 있을때, 해당 객체를 공유객체라 일컫는다.예를 들어, MusicPlayer라는 여러 class들이 MusicBox라는 하나의 클래스를 공유하되, MusicPlayer 객체를 다른 인자를 기반으로하여 다양한 생성자를 만
일전 공유객체를 사용하여, 여러개의 스레드가 공유객체의 메소드를 활용하는 상황이 일어난다고 가정해보자.위 MusicBoxTester의 main thread를 실행하면 playMusicA메소드와 playMusicB메소드가 순서 상관없이 뒤죽박죽 호출 및 실행된다.이를 다
실제 JVM이 java를 실행한다고 할때, 여러 스레드를 매우 짧은 주기의 시간 동안 한 스레드를 처리하는 과정을 반복하기 때문에 마치 여러 개의 스레드가 동시에 실행되는 것 처럼 보인다.스레드가 상태제어받는 과정 동안 매우 많은 명령들을 처리하게 된다.특히 메소드가
스레드를 상태제어할 수 있는 메소드 중 하나로, 현재 실행중인 메소드를 강제로 lock(실행대기) 상태로 변환하고 join 메소드 대상 스레드를 실행 및 종료될때까지 대기하게 하는 메소드이다.아래 스레드가 선언되어 있다고 가정해보자.이 스레드를 실행하기 위해 main
동기화된 block 내부에서 사용하는 메소드로, 현재 실행중인 스레드를 강제로 lock하여 다른 스레드를 강제로 실행하는 메소드이다.wait을 통해 다른 스레드를 호출하고, 해당 스레드가 실행완료될 때까지 대기한다.wait을 통해 호출한 다른 스레드는 반드시 notif
데몬이란 리눅스 및 유닉스 계열 운영체제에서 백그라운드로 동작하는 특별한 기능을 가지는 프로그램을 말하며, 윈도우에서는 서비스라고도 일컫는다.Java에서도 데몬과 유사하게 동작하는 스레드를 만들 수 있다.Java 프로그램 제작 시 백그라운드에서 특별한 목적과 기능을 제
기존 하나의 메소드를 실행하기 위해 인자에 객체를 생성하고 내부적으로 메소드를 선언하던 복잡한 구조를, 임의의 1회용 객체를 생성하고 메소드 부분만 전달할 수 있는 간결한 구조로 변환한 구문을 일컫는다.위와 같이 기존 방법을 통해서 run 메소드를 실행하기 위해선, 내
오늘까지 Servlet(controller), DAO(model)들을 작성하면서 Restful API, Restful service에 대한 개념을 어느정도 명확하게 이해할 수 있었던 것 같습니다.Restful하다는 의미에 대해 이전까지는 client 요청에 대한 대표적
java에서 json 데이터를 처리하기 위해 사용할 수 있는 라이브러리는 크게 두가지가 존재한다.jackson : 자바용 json 라이브러리로 잘 알려져 있지만 Json 뿐만 아니라 XML/YAML/CSV 등 다양한 형식의 데이터를 지원한다. Object, Array,
문제를 해결하려면 log보다 디버깅 모드가 훨씬 현실적이고 효율적이고 편하다.디버깅 모드로 실행한 후, F5 누르면 메소드 안으로 들어가고 F6 누르면 메소드 안으로 진입하지 않고 다음 라인으로 이동한다.return 등으로 인해 해당 로직 종료 후 F5/F6로 다음 단
자바의 참조형 변수(객체)는 힙 영역에 할당되고, 스택 영역에 지역변수나 스레드(실행을 유발하는 동작/메소드)가 할당된다.참조형 변수, 즉 객체 생성 시 힙 영역에 데이터가 저장되며 이에 대한 참조값을 스택 영역에 저장한다.이때 immutable object는 힙 영역
## 1. 개요 로직 구조화 작업을 진행하면서 for문, 중첩 for문을 어떻게 다듬는게 좋을지 많은 생각을 해보았다. 물론 단순 반복문 수행 상황에서 성능적인 측면을 고려할때 for문이 낫긴 하지만(새로운 객체 생성 및 모든 반복 수행 등으로 인해), 어느 적정
## 1. 개요 성능 개선 작업을 진행하면서, 특히 대용량 통계 데이터 산출 시 작업관리자의 CPU와 GPU 점유율이 들쭉날쭉하는 것을 보면서 Java application과 운영체제의 관계에 대해 생각해보았다. ## 2. Java application과 메모리 간
로직 구조화 작업을 진행하면서 흥미로운 내용을 발견하여 기록한다.단순히 숫자, 문자열을 하드코딩하여 반복순회횟수, default 처리값 등에 넣어 사용하는 과정을 의미한다. 개인적으로는 의미가 불분명한 숫자나 문자열 그 자체보다는, 이 숫자나 문자열을 사용한 로직 그
동시성 제어를 DBMS 관점이 아닌 java 관점에서 처리할 수 있는 방법을 알아보았다.immutable 개념을 기반으로, DTO같은 자원을 static으로 처리하여 동시성 제어를 할 수 있지 않을까 생각하였는데, 일단 static 자체가 클래스 로더가 생성되면서 해당
성능테스트를 진행하면서 대용량 데이터를 안전하게 처리할 수 있는 방법, 유량제어를 할 수 있는 방법을 계속 고민해보았다.이 중 원리가 가장 기본적이고 유용하게 적용이 가능할 것으로 보이는 방안을 찾게 되어 기록한다.유량 제어 : <배치처리/대용량 데이터 다건 처리
대용량 전산처리 로직의 성능 개선 작업을 진행하면서 대용량 처리 작업을 많이 보게 되는데, 이때 대용량 처리가 반드시 배치처리로 이루어지지는 않는다는 것을 알게 되었다.일전에 대용량 처리를 배치로 작업하지 않는다면 비효율적이고 connection pool 관점에서 낭비
대용량 데이터를 처리하면서 BatchSession과 SqlSession을 통한 진행이 어떠한 차이점이 있는지 고민해보았다. 배치와 일반 대용량 데이터 처리를 어떠한 방향으로 바라보아야 할지 명확히 하기 위해 기록한다.https://velog.io/@gyrbs2
리팩토링을 진행하면서 발생한 Null Exception 오류를 보면서 다음과 같은 생각을 해보았다.예상치 못한 null exception의 위험성을 최소화할 수 있는 안전장치가 있을까가독성, 로직의 길이를 최소화할 수 있는 방안이 있을까그리고, 자바스크립트의 삼항연산자
대용량 데이터 전산 처리 성능 개선 작업을 진행하면서 동시성 제어와 유량 제어 뿐만 아니라 여러 다른 고려사항까지 생각하면서 공부를 해보았는데, 다른 스레드의 무한 로딩 혹은 한 스레드의 자원 무한 점유 상태까지 고려해야 하지 않을까하는 생각을 하게 되었다.성능테스트를
MVC Pattern에서 트랜잭션 구현은 크게 두가지 틀로 구성하면 확장성이나 유연한 대응이 좋아진 경험이 있는데, 이에 대해 기록한다.유의해야할 두가지 항목, 첫번째는 유효성 검증과 두번째는 예외 상황에 대한 처리이다.트랜잭션 처리를 진행할 경우 이론적으로 int t
개인적으로 스프링 배치를 공부하면서 스프링 컨테이너와 빈의 생성주기와 배치가 매우 밀접한 관련이 있다는 것을 알게되었다.배치스케쥴러가 스프링 프레임워크 아키텍칭 요소(환경설정)과 결이 비슷하고, 이에 따라 생성 사이클에 대해 한번 정리하는 것이 좋겠다 생각이 들었다.아
어느날 개발 표준 관련 공지사항 중에 템플릿 리터럴, 동적 변수 관련 내용이 있었다.내용의 요지는 템플릿 리터럴을 사용하고, 문자열을 붙이는(+) 형식의 로그 혹은 메시지 처리는 사용하지 말라는 것이었다.이 부분에 대해 질문을 드렸는데, 메모리 관련한 이유라고 말씀하셨
소스 프리징까지 3주, 남은 개발건 두가지.사실 지금까지 개발해오면서 가장 아쉬웠던 부분은 테스트 코드를 작성하지 못하였다는 점이다. 개발표준에 테스트코드 관련한 부분이 없기도 하였고, 외부망을 사용하지 못하는 환경 특성상 폐쇄적인 운용으로 인해 개인적이고 사소한 구성