catch-me-java의 등록된 링크

 catch-me-java로 등록된 티스토리 포스트 수는 55건입니다.

내가 선택한 DB 동시성 해결방법 [내부링크]

내가 선택한 DB 동시성 해결방법 서론 오랜만에 블로그 포스팅이다. 포스팅 아이템들은 넘처나는데, 시간이 없어서(핑계) 작성할 시간은 없었던 것 같다. 마침 진행하던 프로젝트에서 동시성 이슈가 터졌고, 이를 해결하는 여정을 공유해보려고 한다. 대외비가 걱정되어 작성을 고민했지만, 알고보니 아주 흔하디 흔한 동시성 문제이고 생각보다 내가 생각한 방식으로 많이들 해결하고 있다기에 작성을 망설이지 않았다. 시작해보자 배경 지식 이커머스 프로젝트를 진행할 때, 이벤트 상품 또는 물량이 제한되어있는 상품이 있을 것이다. 간단한 예를 하나 들어보도록 하자. 커머스에서 맥북 pro m1 max 를 100개 10만원에 한정 판매(가지고싶다) 한다고 하자. 그리고 이 이벤트는 다가올 2021년 1월 1일 07시 00분에..

[CS & Algorithm-10] 로프 문제 (Greedy) [내부링크]

BaekJoon Online Judge 2217 Question :https://www.acmicpc.net/problem/2217 Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution7.java /** * 문제 * N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. * * 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 ..

[CS & Algorithm-9] 거스름돈 (Greedy) [내부링크]

BaekJoon Online Judge 5585 Question :https://www.acmicpc.net/problem/5585 Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution6.java /** /** @link : https://www.acmicpc.net/problem/5585 * * @implNote 타로는 자주 JOI잡화점에서 물건을 산다. * JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. * 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 ..

[CS & Algorithm-8] 잃어버린 괄호 (Greedy) [내부링크]

BaekJoon Online Judge 1541 Question :https://www.acmicpc.net/problem/1541 Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution5.java /** * 문제 & 설명 : https://www.acmicpc.net/problem/1541 * 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. * * 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. * * 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. * * 입력 * 첫째 줄에 식이 주어진다. 식은 ‘0’~..

[CS & Algorithm-7] 회의실 배정 (Greedy) [내부링크]

BaekJoon Online Judge 1931 Question :https://www.acmicpc.net/problem/1931 Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution4.java /** * 문제 * 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다...

[CS & Algorithm-6] 동전 0 (Greedy) [내부링크]

BaekJoon Online Judge 11399 Question :https://www.acmicpc.net/problem/11047 Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution3.java //https://www.acmicpc.net/problem/11047 /** * 문제 * 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. * * 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. * * 입력 * 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) * * ..

[CS & Algorithm-5] BaekJoon 설탕 배달 문제 (Greedy) [내부링크]

BaekJoon Online Judge 11399 Question :https://www.acmicpc.net/problem/11399 Source :https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution2.java 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더..

[CS & Algorithm-4] BaekJoon ATM 문제 (Greedy) [내부링크]

BaekJoon Online Judge 11399 Qusetion : https://www.acmicpc.net/problem/11399 Source : https://github.com/lee-maru/practice_algorithm/blob/master/src/Solution1.java 인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3,..

[AWS-0] 0년차 개발자의 AWS practitioner 자격증 후기 [내부링크]

0년차 개발자의 AWS pratitioner 자격증 후기 1. 왜 자격증까지 따면서 공부를 해? 이번에 회사를 이직하면서, 팀 내에서는 AWS 환경을 적극적으로 사용하고있습니다. 반대로 이전회사에서 IDC 인프라를 관리해주시는 분이 있는 반면, 현 팀에서는 개발과 devops 업무를 같이 병행해야 했고, 좋은 경험을 할 수 있어서 긍정적으로 생각했지만, 긍정적이라고 저의 무지함이 가려지는 것은 아니었습니다. 저의 경력사항은 다음과 같습니다. 회사명 서비스 직책 재직기간 블루코어 (중앙대병원 환자관리 웹사이트) 인턴 ~ 정직원 2020.08~2021.02 스탁키퍼 뱅카우 한우 선물투자 플랫폼 정직원 2021.03~재직중 간단한 서버 구축이 아닌, 비지니스 인프라 이슈에(네트워크) 대처하는데 너무 많은 시간..

[Java-36] 자바 제네릭, < > [내부링크]

Java Generic Generic, 제네릭 기본기 generic 을 알아보기전에, 만약 제네릭이 없었을 때를 생각해보자. 일단 ArrayList 에서 또한 우리가 알고 있는 제네릭이다. 그렇다면 없었을 경우에는 ArrayList list = new ArrayList(); 와 같은 방법으로 리스트 선언이 가능했다. 마치 파이썬에서 리스트를 선언하듯이 일정의 타입없이 사용이 가능하다는 것이다. 코드를 보도록 해보자. public static void main(String[] args){ ArrayList list = new ArrayList(); list.add("Hello"); String str = (String) list.get(0); } 문제는 이와 같다. list 에서 꺼내야 하는 타입을 타입 ..

[Java-35] Lombok @Getter, @Setter 직접 만들어 보자 [내부링크]

Java Annotation Q : 왜 롬복을 만들어 보려고 하는가? 우리는 롬복을 정말 많이 사용하고는 한다. 하지만, 이 롬복이 실제로 어떻게 작동하는지에 대해서 아는사람은 많이 적을 거라고 예상한다. 나 자신도, 롬복은 그저 마법 같은 존재였을 뿐이었고, 보통 이렇게만 사용하는구나, 라고만 생각했다. 우연히 백기선님의 'The JAVA, 코드를 조작하는 다양한 방법' 의 소개 영상에서 롬복의 밑단에서 어떤 일이 발생하는지에 대해, 우리가 사용하는 코드 밑단에서 무슨일이 발생하는지에 대해서 강의가 오픈되었다고 한다. 이 강의에 끌리기 시작했고, 무작정 강의를 듣기 시작했다. 재밌게 잘들었지만, 롬복에 대한 호기심은 사라지지 않았고, 직접 롬복을 비슷하게 만들어본 사람이 있을까? 찾아봤지만, 한국에서는..

[Java-34] Enum 기본 (열거 타입) [내부링크]

Java Enum 열거타입, Enum 정의 하는법 데이터를 저장할 때 우리는 가끔 한정된 값으로만 데이터를 저장해야할 때가 많이 있을 거시다. 예를 들어서 4계절 을 따져볼 때, FourSeason(Spring, Summber, Fall, Winter) 이 4가지를 제외하고 다른 계절이 올 수 없을 것이다. 그럼 우리는 public static void main( String[] args ) { String season = "winter"; } 다음과 같이 직접 String타입의 필드를 선언해주고, 리터럴을 입력해줘야 하지만, Enum(열거타입)을 사용하게 되면, 이를 *enum 타입으로 정의할 수 있다. * enum 정의 하는 법 enum.java public enum Season { SPRING, /..

[Java-33] java 스레드(Thread) 기본기 [내부링크]

Java Thread java Thread , Multi Thread Multi Thread 란 Thread class, Runnable interface 사실 이 둘은 궁극적으로 멀티 쓰레드를 지원하기 위한 녀석들이다. 이 둘을 알아보기 전에 우리는 멀티스레드에 대해서 좀더 알아봐야할 필요가 있다. 나는 처음에 멀티쓰레드에 대해서 잘 이해하지 못했다. 한거번에 2가지의 일을 한다는게 이게 말이 되는 걸까..? 간단하게 생각해보자 인간은 태초에 선형으로 생각하고 행동해 왔다. 다음의 그림으로 예를 들어보도록 하자. 사람은 기본적으로 다음과 같이 행동하게 된다. 밥을 먹으면서 낮잠을 잔다거나, 잠을 자면서 공부를 한다는게 말이 안되는 것이다. 하지만 컴퓨터는 가능하다. 아니 가능한 것처럼 보이게 했다. 이..

[Java-32] java 예외처리 기본기 [내부링크]

Java Exception 자바가 제공하는 계층구조 우리는 java 코드를 작성하면서, 또는 개발을 하면서 많은 에러를 봐왔을 것이다. 그 중 우리는 자바에서 어떤 에러들이 있고, 그리고 자바에서는 어떻게 에러를 관리하는지에 대해서 알아보도록 하자 왜 Error에 대해서 공부해야 하는가? 만약 자바 에러처리에 대해서 배우기전에, 왜 에러에 대해서 알아야 하는가? 또는 자신은 개발을 하면서 에러문을 일기 않는다. 라고 했을 때, 다음 동영상을 꼭 보도록 하자. 자바에서 코드를 작성하면서 문제가 될 때는 크ㅈ게 2가지로 나눌 수 있다. 일단 모든 예외의 계층 구조에 대해서 한눈에 보도록 하자 Exception 과 Error 의 다른 점 예외와 오류는 모드 Throwable 클래스 의 하위 클래스인데, 에러는..

[Java-31] java8 이전 의 인터페이스 [내부링크]

Java interface java 인터페이스 정의 하는 방법 인터페이스는 .java 형태로 컴파일러를 걸치면 클래스 형태로 컴파일 되기 때문에, 실질적으로 형태는 클래스와 동일하다고 할 수 있다. 인터페이스 선언 public interface Example{ // do something } 여기까지는 클래스와 정의하는 방법이 별반 다른거 없이 보일 수 있지만, 몇가지 다른 점들이 있다. 클래스 인터페이스 필드 상수 생성자 - 메소드 메소드 (자바 8 이전에는 추상 메소드) public interface Excample{ //상수 타입 상수명 = 값; //추상 메소드 타입 메소드명(매개변수, ...); } 물론 여기서 더 추가가 될 수 있는 default, static, private이 있지만 이는 이 ..

[Java-30] java8 과 java9 의 인터페이스 변화 [내부링크]

Java 8,9 interface 의 default, static, private 메소드 자바8 이상 interface 일반적으로 우리가 사용하는 자바에서는 인터페이스와 메소드는 는 밀접한 관계를 가지고 있다. 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메소드를 구현을 하거나, 슈퍼클래스의 구현을 상속받아야 한다. interface의 문제점 무법지대와 같은 개발 세계에서, 설계가 수정되는일이 비일비재(非一非再) 하다 . Designer(설계자)는 새로운 메소드를 추가 하거나, 인터페이스를 바꾸고싶을 때, 인터페이스를 바꾸면 이전에 해당 인터페이스를 구현했던 모든 클래스의 구현도 고쳐야 한다. interface의 개선 자바 8에서는 인터페이스를 구현할 수 있는 정적 메서드(static me..

[CS & Algorithm-3] DFS, BFS 알고리즘 에 대하여 [내부링크]

D F S (Depth - First Search) & B F S (Breadth - First Search) D F S 란 깊이 우선 탐색이라고 불림, 깊은 부분을 우선적으로 탐색하는 알고리즘 스택 자료구조 (또는 재귀)를 이용함. 처음 시작하는 노드를 스택에 push 스택의 최상단 노드에 방문하지 않은 인접한 노드가 있다면 또다시 조회 이를 지속적으로 반복 (끝날 때 까지) B F S 란 BFS는 너비 우선 탐색이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘, 큐 자료구조를 이용 탐색 시작 노드를 큐에 삽입하고 방문 처리를 함. 큐에서 노드를 꺼낸 뒤에 해동 노드의 인접 노드 중에서 방문하지 않는 노드를 큐에 삽입 이를 지속적으로 반복 (끝날 때 까지)

[Java-29] 자바 패키지, 접근제한자 & 클래스패스 [내부링크]

Java Package, 접근제한자, classPath, 환경 변수 package 와 접근제한자, 클래스패스 에 관하여 우리가 실제로 개발하면서, 정말 많은 클래스를 만들거나, 이미 만들어져 있는 클래스를 사용할 수 있다. 패키지란 이 클래스들을 정리하는 폴더 라고 생각하면 된다. 뒤죽박죽 되어 있는 파일들을 정리하기 위해서 폴더가 필요하 듯이, 정리가 되어있지 않은 클래스들을 정리하기 위해서는 패키지 를 사용하여야 한다. 단 한가지 다른점이 있다면, 패키지는 폴더 그 이상의 역할을 한다. 모든 자바의 클래스는, package 이름.class이름 이다. package org.example.test1; //tset1 패키지 public class Foo { }package org.example.test2;..

[Java-28] 자바 method? func? [내부링크]

Java Method Func? 메소드 메소드 vs 함수 우리가 프로그래밍 언어를 배우면서 함수면 함수지 메소드라는 말은 많이 들어본적이 없을 거다. 또한 메소드와 함수는 엄밀히 말하면 서로 다른 의미 이므로, 이 점부터 집고 넘어가 보도록 하자. import Foundationn func length(value: String, value2 : String) -> Bool{ return value1.characters.count < value2.characterrs.count } var test = Int(readLine()!)! public class A{ int a; int b; public int sum(){ return a+b; } } 이런 코드가 있다고 가정해보자, 위에는 swift 언어로 ..

[Java-27] 자바 생성자에 대한 고찰 [내부링크]

Java New Keyword 자바 생성자에대한 고찰 (this, Builder, Overload) 생성자는 이전에 설명한 new 연산자와 가이 사용하고, 객체를 생성하는 역할과 객체 초기화 역할을 한다. 생성자가 제대로 실행도지 않는다면, 객체의 주소값이 리턴도지 않을 뿐더라, 객체가 heap에 올라가지도 않을 것이다. 기본적인 생성자 기본생성자 Class() 기본적으로 생성자를 정의해주지 않는다 하더라도, Object 를 상속받은 모든 클래스들은 기본 생성자 라는걸 가지고 있다. 예를 한번 들어보자 public class App // 생성자 in Object class { A a = new A(); B b = new B(); C c = new C(); D d = new D(); E e = new ..

[Project] [] 공공데이터 지번주소를 도로명 주소 변경 프로그램 [내부링크]

[]지번주소를 도로명 주소로 test code src main code 요구사항 1. 엑셀 파일을 읽어서, 지번 주소를 도로명 주소로 변환할 수 있어야 한다. 2. 도로명 주소는 사용자가 원하는 셀에 저장 3. 수정이 완료된 파일은 다른 파일로 저장 4. window 기반 프로그램 [] Tech 1. JavaFx 11.0.2 install Link 2. apach poi install Link 3. 공공데이터 api link 4. jdk 11.0.9 intall link []요구사항 시나리오 초기 화면 프로그램 실행 후 화면 [] /사용자 시나리오 변경할 파일 찾기 변경한 파일 저장 위치 찾기 몇번째 열에 지번 주소가 있는가? (숫자로만 입력) 몇번째 열에 도로 주소를 넣고, 몇번째 행까지만 실행..

[Java-26] 자바 new & Heap, Constant pool [내부링크]

Java New Keyword new 키워드 이해하기 (new Operator) 자 저번에는 우리가 어떻게 Class를 생성하고 만드는지, 그리고 클래스의 간단한 종류에 대해서 알아 보았다. 그럼 다시 간단한 클래스를 정의 해보자 public class Study{ // Study 클래스 정의 String name; } public class App{ public static class void main(String args[]){ Study study; // Study instance 생성 } } 지금 study라는 인스턴스는 여타 String, Integer 와 같이 현재 저렇게 딸랑 정의 해 놓으면 아무 상태도 아니다. 만약 저 상태에서 우리가 study를 출력하려 한다면 initialize, ..

[Java-25] 클래스 & 내부클래스 & 익명클래스 [내부링크]

Java Class Java 클래스 클래스? 어떤 객체지향 언어에서든지, 클래스라는 개념을 한번쯤은 들어봤을 것이다. 먼저 간단한 코드를 분석해보자, 자바에서 클래스를 선언 public class App { } 정말 쉽다, 이런식으로 public + class + name 다음과 같이 만들면 클래스 하나가 생성된 거다. 이제 클래스를 직접 만들어보면 애완동물 클래스인 Pet을 만들고, 여기에 변수도 넣어보자 public class Pet { String kind; // 펫의 종류 String name; // 펫 이름 Integer age; // 펫 나이 } 이렇게 만들어 놓은 클래스는 우리가 마음대로 찍어낼 수 있다, 내가 강아지를 키우고 있다면 클래스를 변수로 선언하여, 클래스에다가 마음대로 집..

[CS & Algorithm-2] Algorithm repository [내부링크]

https://github.com/lee-maru/practice_algorithm lee-maru/algorithm Contribute to lee-maru/algorithm development by creating an account on GitHub. github.com

[Java-24] junit 추가하는법, 간단 사용법 [내부링크]

Java Junit Junit 은 자바 진영에서 단위테스트를 하는 ‘framework’중 하나이다. 첫 문장의 Junit은 자바 진영에서라고 얘기를 했듯이, unit 테스트를 여러 언어에서, 또는 환경에서 사용할 수 있다. DB단에서는 dbunit, front 단에서도 사용할 수 있는 xUnit 으로 여러가지 unit 테스트 환경이 있다. 그 중 자바에서 많은 사람들이 사용하는 Junit 사용법에 간단하게 알아보도록 하자 JAVA DEPENDENCY IDE : Intelli J Java : Java 14 OS : Mac maven 의존성 추가 maven repository 에 들어가서 junit 을 들어간다. maven repository 에는 수많은 (우리가 사용하는) 의존성을 추가할기 쉽게 검색을 해..

[Java-23] 자바 조건문, 반복문 [내부링크]

Java 조건문과 반복문 조건문 If 문 if문은 java든, 아니든 코드를 작성하면서, java가 이 코드를 실행을 할지 안할지 결정할 수 있게 해주는, 프로그래밍 언어에서는 필 수적은 조건문 이라고 할 수 있다. 간단한 예를 들어보자 if(true){ //실행 되는 코드 } if(str == null) { str = "helloWorld"; } 다음과 같은 코드에서 str 변수가 정말로 null값을 가지고 있다면, 실제로 { } 안에 있는 문법이 실행이 되는 것이다. 이런 간단한 if문은 다시 if(str == null) str = "HelloWorld"; 이런식으로 { }을 작성해주지 않아도 알아서 잘 작성하는 걸 볼수 있다. else 문 if문 에서는 else 라는 keyword를 지원한다. el..

[CS & Algorithm-1] linkedlist , queue, stack [내부링크]

자료구조 자료구조 정리, 실습 for README.md 1. 링크드 리스트 리스트 노드 기본 원리 정수를 저장하는 링크드 리스트 링크드 리스트 add 링크드 리스트 remove 링크드 리스트 contains Linked List 코드 Linked List 테스트 코드 2. 스택 스택 기본 원리 정수를 저장하는 스택 (배열 사용) Stack Array 코드 Stack Array 테스트 코드 정수를 저장하는 스택 (노드 사용) Stack Node 코드 Stack Node 테스트 코드 스택 push 구현 스택 pop 구현 3. 큐 큐 기본 원리 정수를 저장하는 큐 (배열 사용) Queue Array 코드 Queue Array 테스트코드 정수를 저장하는 큐 (노드 사용) Queue Node 코드 Queue No..

[Java-22] 자바13 스위치, java13 switch 연산 [내부링크]

Java13 Switch case 이번에 다룰 switch 문법은 java 13버전의 스위치문에 대해서 다룹니다. 만약, swich 문을 모르신다면, 기본적인 문법에 대해서 보고오시면 이해가 더 편하실 겁니다. 자바13 이전의 switch case 문법 자바 13이전의 스위치문에서는 정확히 12버전 이하라고 얘기를 하자, 12에도 preview로 업뎃이 있긴 했었다. 이전의 자바에서 스위치는 어떻게 동작을 했을 까? 이런 코드의 문제점은 무엇일까? 사실 문제점이라고 하기는 그렇다. 자바가 switch case 문을 만들었을 때, C와 C++에 밀접하게 연결하여 만들었고, 이런 코드가 사실 문제가 될 건 없다고 생각한다. 적어도 아직 초보개발자인 나에게는 말이다 : ) 근데 java에서 jdk12를 내놓으..

[Java-21] 화살표 연산자 (->) 그리고 람다 원리 [내부링크]

Java lambda expression 우리가 -> 를 처음보면 당황할수 밖에 없다. 기본 개념을 모르고 접근하면, 요 안에서 무슨일을 하는지 도저히 알 수가 없기 때문이다. 이 포스팅은 클래스, 인터페이스를 알고 있다는 전제하에 얘기를 한다. 만약에 클래스와 인터페이스에 대한 개념이 부족하다면, 꼭 그 부분을 보고 와야 한다. 1. 람다 이전의 자바 (함수형) Interface interface는 말그대로 껍대기로만 생각을 하자, 기본적으로 interface를 사용하면, 보통은 그 안에다가 메소드 이름과 파타미터의 타입만 정의 한다. 말 그대로 interface의 역할만 하는 것이다. 물론 static과 default 키워드를 사용하면 Interface 안에서도 메소드 구현이 가능하지만, 그 부분까지..

[Java-20] 자바 연산자 우선순위 [내부링크]

Java 1. 간단한 연산자 표 Simple 종종 연산자에 대해서 얘기를 할 때, 연산자 우선순위에 대해서 얘기 한적이 있다. 그래서 이번에는 연산자 우선순위를 정리하는 시간을 가지도록 해보자 먼저 우리가 지금까지 알고 있었던 연산자 우선순위에는, 다음과 같은 표를 많이 봐왔을 것이다. Simple , 간단한 우선순위이다. 우리는 똑똑하니 뒤에표를 보도록 하자 : D 우선 순위연산자 내용1(),[]괄호 / 대괄호2!,~,++,--부정/ 증감 연산자3*, /, %곳셈/나눗셈 연산4+, -덧셈/빼기 연산5,>>>비트단위 쉬프트 연산자6= 관계 연산자8==, !=9&비트단위의 논리연산10^ 11&&논리곱12||논리합13?:조건부 연산자14=,+=,-=,*=,/=,%=,=,&=,^=,~=대입 할당 연산자 이렇게..

[Java-19] 삼항 연산자 기본 (원리) ?: [내부링크]

Java The conditional operator 조건부 삼항 연산자 ? : 조건 연산자 ‘?:’는 C언어에서 상속 받은 뭔가 애매한 3항 연산자 이다. 이 3항 연산자는 어떠한 연산식 안에서 이 삼항 연산자를 이용해 조건을 달 수 있게 해준다. 조금만 생각해보면. “ 아 수식 안에서 if문을 사용하는구나?” 라고 생각 할 수 있다. 다음 코드를 보자 첫번째 피연산자 i 와 x , 그리고 연산자 > 는 물음표 ?를 기준으로 나누어 지게 된다. 그리고 물음표 이후 : (콜론) 기준으로 또 다시 나누어지게 된다. 먼저 조건부 연산 ( > ) 을 먼저 수행하게 됩니다. 그리고 만약 첫번 째로 수행한 i > x 가 true 이면 다음 과 같이 i 를 반환하게 된다. 만약 False 값이 들어가게 되면 x를 ..

[Java-18] 자바 대입 연산자 & 증감 연산자 [내부링크]

Java Assignment Operators 대입 연산자(Assignment Operators) 대입 연산자는 값을 컴퓨터 메모리의 일부에 대입하거나, 저장하기 위해 사용된다. 이게 무슨 뜻인지 잘 모를 수도 있으니, 예제를 보면서 확인해보자 *혹시 만약에 JVM에서 메모리 관리를 어떻게 하고있는지 모른다면 JVM글을 정리한 블로그를 한번 보고오도록 하자 대입연산자에도 왼쪽과 오른쪽 연산이 있다. 예를들어 A = B 다음과 같이 말이다. 왼쪽 연산자 A는 오로지 지역변수, 배열 원소, 객체의 필드(변수) 가 오는게 적절하다. Lefthand side (왼쪽 피연산자) 는 대입식에서 가끔 lvalue 라고 부르기도 한다. left value의 뜻이다. Righthand side(오른쪽 피연산자, rval..

[Java-17] 자바 Instanceof [내부링크]

Java Instanceof Operator Instanceof 연산자(instanceof operator) ‘instanceof’ 연산자는 객체와 자바의 타입에 긴밀하게 밀점하여있습니다. 만약 자바를 처음 공부하시는 분이라면, 객체(Object)에 대해서 먼저 알아보고 이 글을 읽었으면 좋겠습니다 :D ‘instanceof’ 의 기본 형식은 이렇습니다. ***A instanceof B instanceof 는 연산을 하기위서 A 부분에는 객체 Object 또는 배열 값(value)가 필요하고, 오른쪽 피연산자에는 레퍼런스 타입이 들어가야 합니다. 이런식으 instanceof 로 int 와 같은 primitive를 연산할 수 없다는 특징을 가지고 있다. instanceof는 객체의 instance 나, 배..

[Java-16] 논리 연산자 [내부링크]

Boolean or Logical Operators 1. 논리 연산자(Boolean or Logical Operators) 우리가 지금까지 봐 왔듯이 , 비교 연산자는 두 수를 비교를 해서, 그 결과 값을 boolean(TRUE, FALSE) 를 반환하고, 우리는 아마, if문이나 for문을 통한 루프, 연속된 조건이 체이닝 걸렸을 때(Branching and Looping statements) 많이 사용했을 것이다. 한가지의 상황에서만 대처하는게 아니라 보통 2가지 이상(여러개의) 상황을 비교해야 하기 때문에 우리는 Boolean 연산자 *논리연산자 를 사용해서 Multiple한 비교를 진행할 수 있다. 논리 연산자는 피연산자에게 Boolean *참/거짓 값을 받아야 한다. 그리고 값을 통해 연산을 하..

[Java-15] 관계 연산자 [내부링크]

Comparison Operator 1. 관계 연산자(Comparison Operators) 관계 연산자는 Equality operators, 즉 연관된 서로의 값들이 같은지 비교하거나, 넓게는 그 값보다 크거나 작음을 서로 비교하는 비교하는 연산이다. 보통 이제 만약 두가지의 타입을 비교하게 된다면 결과 값은 true, false 를 반환하게 된다. 그래서 전형적으로 If(boolean 조건) while(boolean 조건)에서 대부분 사용하게 된다. 예를들어서, 다음과 같은 방식으로 사용하기 쉽다. 이제 여러가지 관계 연산자를 알아보도록 하자. ' = = ' 연산자 (EqualsOperators) ‘==’ 연산자는 기본적으로 프리미티브 타입에 한해서 두 피연산자의 값이 같으면 true, 아니면 fal..

[Java-14] 비트 연산자와 쉬프트 연산자 [내부링크]

Bitwise and Shift Operator 1. 비트 연산자 (Bitwise) 비트연산과 쉬프트 연산은 low-level 의 연산자이다. 보통 개별의 비트를 integer 값으로 만들려 할 때, 많이 사용하게 된다. 비트 연산은 사실 low-lovel(네트워킹 작업)을 하는 경우를 제외하고는 모던 자바쪽에서는 잘 사용하지 않는 연산이긴 하다. 보통 flag 를 이용한 테스트를 위해 사용한다고 한다. flag에 대해서 알고 싶다면 이 블로그를 참고하면 좋다. 일단 우리가 bit를 사용하는 연산을 이해하기 위해서는 ‘바이너리(binary)’와 ‘보수(음의 정수 표현을 위해)’에 대해서도 알고 있어야 한다. 바이너리와 보수에 대해서는 따로 언급하지는 않고, 적절한 공부 링크를 적어서 학습할 수 있도록 하..

[Java-13] 자바 산술 연산자 [내부링크]

Java Arithmetic Operator 1. 산술 연산자 (Arithmetic Operator) 산술 연산자는 부동 소수점, Characters, 정수형과 함께 사용할 수 있다. (Boolean 연산자를 제외하고, 기본형 타입은 전부 사용할 수 있다.) 만약 우리가 자바에서 실수(부동 소수점) + 정수를 한다면, 실수 산술 연산자가 진행 되고, 그렇지 않다면 정수 연산이 진행된다. 왜 그렇게 될까? 라고 생각을 한다면, 타입 캐스팅 블로그 포스팅을 보고오면 감이 올 것이다. 더하기 (+) Addition ‘+’ 연산자는 두개의 숫자를 더해줍니다. 또한 + 연산에서 String 타입이 있으면 이 두가지 타입을 연결해준다. 만약 피연산자 중 하나가 String 타입이면, 즉 “String” + 3 이면..

[Java-12] 자바 배열 [내부링크]

Java Array 바로 본론으로 들어가자, 1. 배열 (Array) 배열은 원시타입이나, 참조타입으로 구성된 특별한 객체 이다. 배열에 담기는 값들은 배열의 타입에 의해서 결정이 되고, 배열의 넘버링, 즉 사이즈는 0부터 시작되고, 배열에 들어가는 데이터로 사이즈가 결정이 됩니다. (배열에 들어가는 원소의 수가, 배열의 수가 된다.) 또한 배열을 생성할 때, 명시적으로 배열의 사이즈를 결정해줄 수 있습니다. 배열의 원소로 들어가는 타입은 대부분 자바에서 유효한 (valid 한) 타입으로 들어가고, 배열의 타입도 포함 가능합니다. 이 말은, Java 가 배열안에 배열을 만드는 ‘다차원’의 배열의 종류도 지원을 해준다는 뜻 입니다. 2. 배열 타입(Array Type) 배열 유형은 자바 클래스와 마찬가지로..

[Java-11]타입추론 var [내부링크]

Java var type-inference 자바에서도 타입추론을 지원한다는걸 오늘 처음 알았다. 그도 그럴만도 한게, 평소 jdk8만 사용을 하던지라, 타입추론이 가능한지 몰랐다. 결론은 자바 10 부터 type - inference(타입 추론)이 된다는 것이다. 1. 타입추론 이란? 타입추론은 말그대로 개발자가 변수의 타입을 명시적으로 적어주지 않고도, 컴파일러가 알아서 이 변수의 타입을 대입된 리터럴로 추론하는 것이다. 대표적인 타입추론 언어는 자바스크립트, 코틀린, 스위프트 등이 있다. 지금 까지 자바9 에서는 우리가 지역변수를 선언할 때, 명시적인 타입을 적고, 선언하였으며, 그 변수에다가 초기화를 시켜도 되고, 나중에 변수에다가 값을 집어 넣어도 무방하였다. 이런식으로 지역변수를 선언할 수 있었..

[Java-10]변수의 스코프&라이프타임 [내부링크]

Variable's scope & life cycle 저번에는 타입 캐스팅과 프로모션에 대해서 알아보았다. 이번에는 변수의 스코프와 라이프타임에 대해서 알아보도록 하자. 1. 스코프 (Scope) 먼저 우리가 변수를 선언한다고 가정을 하자, 이 변수의 사용 범위는 어디까지일 까? 이 변수의 사용범위는 선언된 클래스의 중괄호 내에서 사용가능하다. 이런 범위를 우리가 ‘스코프’라고 부르는 것이다. 좀더 쉽게 생각해보자, 이해할 때 집합과 섞어서 생각해보면 된다. Class 안에 var1이란 변수가 선언 됬으면 var1의 스코프는 클래스 전체에서 놀 수 있다. 즉, foo() 메소드 안에서도 들어갈 수 있다는 얘기다. 하지만 var2는 어떨까? 저 변수의 스코프는 foo() 안에서의 초록색 칸에서만 사용할 수..

[Java-9] 타입변환, 형변환 [내부링크]

Primitive Type Conversions 자바는 integer와 부동소수점 값(실수) 으로 타입을 변경할 수 있는데, 이게 사실 char형도 숫자로 표현되어 모든 유니코드에 1:1 매핑이 되기 때문에, char 타입도 타입 변환이 가능해진다. 오직 안되는거는 boolean 타입만 다른 원시타입으로 바꿀 수 없다. 타입을 변경하는데에는 2가지 종류가 있는데, ‘프로모션’ 과 ‘캐스팅’ 방식이 있다. Java in Nutshell 에서는 ‘widening conversion’, ‘narrow conversion’ 넓은 변경, 좁은 변경 이렇게 나와있다. 뭔가 ‘widening conversion’, ‘narrow conversion’ 이 좀 더 이해하기 편할 것 같은데, 차근차근 설명해 도록 하겠다...

[Java-8] 자바 변수 선언과 초기화 [내부링크]

저번에는 리터럴과 각 변수의 특징에 대해서 알아보도록 하였다. 이제는 변수를 어떻게 선언하는지 그리고 초기화는 어떻게 진행되는지에 대해서 알아보도록 하자. 먼저 이 주제는 타입에대해서 얘기하기전에 먼저 설명하는게 좋지 않았을까 라는 생각을 하지만.. 각설하고 바로 얘기를 해보자. 1. 변수 선언 변수를 사용하기 위해서는 변수를 선언해야 한다. 변수를 선언하는건 간단하다. 이렇게 처음에 타입을 선언을 하고 바로 뒤에 변수 이름을 집어 넣으면 된다. 뭐 사실 변수를 ‘선언'만 하는 건 크게 어렵지 않다. 물론 여러개의 변수를 선언하는 것도 가능하다. 변수를 선언하는건 크게 어렵지 않으니, 네이밍 컨벤션에 대해서 얘기해보자 물론 여러가지 방식이 있다. 지금 설명하는 얘기는 ‘통상’적으로 말하는 자바 언어의 네..

[Java-7] 자바 타입의 종류 & 리터럴 [내부링크]

프리미티브 타입과 레퍼런스 타입에 대해서 알아보고, 저번에 컴파일 과정에서 나왔던 리터럴에 대해서 알아보도록 하자. 글이 뭔가 중구난방한 것 같은 느낌은 들지만 최대한 정리하도록 하겠다. 1. Primitive Type VS Refrence Type 잠시 책에서 정확히 프리미티브 타입과 레퍼런스 타입에 대해서 설명하였다. 레퍼런스 타입 & 객체는 기본적으로 프리미티브한 값에서 데이터를 가져오게 된다. 여덟개의 원시 타입은 ‘자바언어’에 의해 정의 되어있다. 절대 ‘개발자’가 새로운 원시타입을 정의할 수 없다. 레퍼런스 타입은, 개발자가 타입을 ‘정의’할 수 있으며, 그러므로 수없이 레퍼런스 타입이 많다. 출처 : *Java in a Nutshell 먼저, 기본적으로 저번에 말했던 JVM 안에서 어떻게 이..

[Java-6] Java 기본 타입 (primitive) [내부링크]

자 이제 자바의 데이터 타입과 변수 및 배열에 대해서 설명하는 시간을 가져보도록 하자. 프리미티브 타입이란걸 알아 보기전에 타입은 알겠는데, 프리미티브는 뭘까 할 수 있다. 1. 타입은 알겠는데 프리미티브 타입은 뭐야? 구글 번역기를 돌리면 프리미티브란 단어는 ‘원어' 라는 뜻을 가지고 있다. 자바의 데이터 타입은 2가지로 구성되어있는데, 프리미티브 타입과, 레퍼런스 타입으로 구성되어있다. 이 글에서 이 둘의 차이에 대해서 다루지 않겠다. 먼저 중요한건 프리미티브 타입의 종류와 범위 그리고 기본 값 아닌가? 자 변수의 종류는 무엇이 있을까? 크게 3가지로 나눌 수 있을 것 같은데 정수 타입, 실수 타입, 논리 타입 으로 만들어 있다. 먼저 정수 타입에 대해서 얘기해보도록 하자 2. 정수 타입 정수 타입은..

[Java-5] JDK& JRE, 자바 실행 [내부링크]

전 글에서는 JVM에 구조에 대해서 알아 보았다. 이제 JRE와 JDK 에 대해서 알아보도록 하자. JDK와 JRE는 무엇인가? 꽤나 길게 , JVM에 대한 두가지 포스팅을 올렸다. 이렇게 길게 설명하는게 좋을지 안좋을지 확신이 서지는 않지만 계속 이어나가도록 하겠다. 글을 쭉 읽어왔으면 java가 어떻게 실행되는지 이해 갔을거라고 확신한다. 자 그럼 JVM 이외에 JRE와 JDK에 대해서 알아보도록 하자. 1. JDK 를 왜 사용해야 할까? JDK는 자바 프로그램을 작성하고, JRE를 실행하는데 필요한 툴들을 가지고 있다. 그리고 컴파일러 (javaC) 와 자바 어플리케이션 런처, Appletiviewer 등을 포함하고 있다. 컴파이러는 자바 코드르를 바이트 코드로 변경을 해주는데 이는 JVM이 읽을 ..

[Java-1] 컴파일 방법 & 과정 [내부링크]

JAVA를 사용하기에 앞서, JVM은 무엇이며 자바 코드는 어떻게 실행 되는지에 대해서 알아보는 과정을 가져보도록 합시다. 이 과정을 알아보기전에 몇가지에 대해서 짚고 넘어가도록 하자 1. 시작 JAVA가 나왔을 당시, 기존 C언어 하고는 꽤나 다른 실행 과정을 가졌다. 간단하게 살펴보면, C언어 컴파일 실행 과정 결국 컴퓨터 (OS)가 알아 들을 수 있게 하기 위해 기계어를 번역하는 과정이다. 그럼 JAVA 의 실행과정은 어떨까? 꽤나 함축적이고, JVM이 자동으로 저런 과정을 짚어준다는 걸 그림으로만 봐도 알 수 있을 것이다. 물론 통합개발환경에서 놀고 있는 나같은 경우, 어차피 IDE가 다 해주지 않나? 라고 할 수 있지만, JVM을 더 알아보겠지만, 강력한 기능들이 포함 되어있다. 자 그럼 먼저 ..

JPA @OneToOne 매핑이 안된다고? Unique [내부링크]

JPA @OneToOne 매핑이 안된다고? Introduction JPA를 사용하면서 @OneToOne 어노테이션을 많이 보고 사용했을 것이다. 이 글에서는 OneToOne 어노테이션을 사용했는데도, 데이터가 한개가 아닌 2개가 들어가서 @OneToMany로 들어가는 일이 있거나, 그런 궁금증을 가지신 분들이 보면 도움이 될 수 있다고 생각한다. * 이 글은 JPA,, Database 사전지식이 있다는 가정하에 서술하였습니다. * 환경(Intelli j, h2 database) Situation 1. 두개의 1대1 양방향 관계의 엔티티가 있습니다. (Son, Parent) @Entity @Table public class Son { @Id @Column private String name; @Column..

[Java-4] JVM의 구조 [내부링크]

전 글에서는 JVM에 대해서 간단하게 알아 보았다. 이제 JVM 구조에 대해서 알아보고 JRE와 JDK 에 대해서 알아보도록 하자. 1. JVM 구조 JVM 의 구성요소는 크게 3가지로 구성 되어있다. 클래스 로더 시스템 (Class Loader) 메모리 (Jvm Memory) 실행 엔진 (Execution Engine) 전체적인 그림이다. 1-1. 클래스 로더 시스템 이렇게 3가지의 구조로 되어있습니다. 클래스 로더 시스템은 말 그대로, 클래스를 읽어오는 시스템 구조인데, 로딩 -> 링크 -> 초기화 순으로 진행이 됩니다. 그림으로 표현하면 다음과 같은데, 자세하게 다루지는 않고, 각자 무슨 역할을 하는지 확인해보자, 로딩 시점에는 클래스가 있는지 없는지 확인하게 되는데 만약에 없을 경우, 이 시점에서..

[Java-3] JVM과 JIT 컴파일러란? [내부링크]

전 글에서는 JAVA의 바이트 코드에 대해서 알았다. 이번에는 그 바이트코드를 가지고 어떻게 실행하는지 알아보기 위해, 기본적인 JVM의 JIT 에 대해서 알아보도록 하자. 먼저 실행을 하기 위해서는 생성된 class파일을 java 명령어로 실행을 시켜주면 된다. 예) $ java test.class 또는 $ java test 를 통해서 실행 가능한데, 여기서 java 명령어를 통해서, JRE 가 등장하게 되는데, 한번 전에 말했던 JRE, JVM, JDK에 대해서 얘기해보자. JDK를 통해서 바이트 코드를 생성하고 JRE에게 던지게 된다. JRE를 사용해서 바이트코드를 JAVA명령어로 실행하게 되는데, JVM이 ‘실행’단계를 걸친다. 1. JVM에 대한 이해 JAVA가 지금까지 특정 OS에 독립적 (즉..

[Java-2] 바이트 코드란 [내부링크]

전 글에서는 JAVA의 컴파일 과정을 자세하면서, 자세하지 않게 다뤄 보았다. 이번에는 컴파일이 되었을 때 생성되는 중간코드(바이트 코드) 에 대해서 알아보도록 하자. 1. 중간코드(바이트 코드)가 뭐여 도대체 JAVA가 나왔을 당시, 기존 C언어 하고는 꽤나 다른 실행 과정을 가졌다. 간단하게 살펴보면, 중간코드는 JVM 이 읽을 수 있는 언어라고 생각하면 된다. JVM에서는 이 중간 코드를 바이트코드 라고 하는데, (지금부터 중간코드를 바이트코드라고 적겠습니다.) JVM은 이 바이트코드를 읽어 들여서 컴퓨터 이해할 수 있는 언어로 변환한다. 필자의 개인적 의견 이지만, 바이트 코드는 JVM이 읽을 수 있는 언어로 정의하는 것이지만 더 재밌는 이야기를 해보자, 이것먼저 알아보도록 하자 JVM은 JAVA..

‘mvn’은 (는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 또는 zsh: command not found: mvn [내부링크]

문제 : MAC : zsh: command not found: mvn WIN : ‘mvn’은 (는) 는 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 원인 : 인텔리제이(Intelli J) 터미널에서 메이븐 명령어를 동작하다 보면 다음과 같은 에러문구를 보실 수 있다. 물론 아시는분은 왜 그런지 아실테지만, 간단하게 원인을 말하자면, 컴퓨터에 Maven 설치가 안되어있기 때문이다. Q : 프로젝트 생성할 때, 메이븐 플젝으로 만들었는데요? A : 맞다. 인텔리제이의 기본 내장 톰캣처럼, 인텔리제이 안에서 사용할 수 있는 번들 Maven을 제공을 해준다. Intelli j 에서 Preference -> Build,Execution,Deployment > Build Tools..

자바가 유료라서 코틀린이 대세라고요? [내부링크]

자바가 유료라서 코틀린이 대세라고요? java 유료화를 다루기 이전에, java가 무엇인지에 대해서 알 필요성이 있다. JVM이 뭔지 JDK가 뭔지 JRE가 뭔지에 대해서 학습해야 한다. Java Virtual Machine (JVM) JVM 자바 가상 머신으로, 자바 바이트 코드를 OS에 특화된 코드로 변환하여 실행한다. (특정 플랫폼에 종속적이게 된다.) 여러 벤더에 따라서 구현이 다르고 스펙은 Oracle 문서를 통해 확인할 수 있다. 즉, JVM 은 자바 가상 머신이며, 바이트 코드를 어떻게 실행시킬 수 있는가에 대한 스펙일 뿐이고 구현체는 다양하고, 플렛폼은 종속적이다. > Native 코드로 바꿔서 실행해야하는데, 그 Native 코드도 OS에 따라 다르기 때문이다. Java Runtime E..

JPA 장인께서 소개하는 MySQL 사용시 JPA 성능 향상 방법 9가지-번역 [내부링크]

먼저 이 글은 백기선님의 블로그 ( www.whiteship.me/ ) 을 보다가 알게된 블로그 출처: vladmihalcea.com/9-high-performance-tips-when-using-mysql-with-jpa-and-hibernate/ 의 글을 번역한 내용입니다. 하이버네이트를 사용하면서 MySql 의 성능 최적화를 할지에 대한 고민을 해봤다면 한번쯤 원본을 읽어보길 바란다. High Performance Tip in MySql with JPA & Hibernate JPA & Hibernate 를 MySQL 에 사용할 때 성능 향상 팁 Introduction 모든 관계형 데이터베이스의 고유한 SQL 표준 스탠다드가 있지만, 우리가 관계형 데이터베이스를 최대한 효율적으로 사용하기 위해서는 데..

함수형 인터페이스란? [내부링크]

함수형 인터페이스 우리가 잘 사용하고 있지만, 잘 모르고 사용했던, 함수형 인터페이스 (Functional Interface)는 인터페이스 내에 추상 메서드가 딱 하나 만 있으면 Functional Interface라고 한다. 함수형 인터페이스 예제 //1번 public interface Functional { void doIt(); } //2번 public interface Functional { abstract void doIt(); } //3번 @FunctionalInterface public interface Functional { abstract void doIt(); static void printName(){ System.out.println("java"); } default void pri..

NullPointerException(NPE) 필요한 이유 [내부링크]

문뜩 백기선 선생님의 수업 (인프런 java 8)의 Optional에 대한 수업을 듣다가 궁금증이 생겼다. NPE 는 왜 발생하는 걸까? 해석해 보자면 다음과 같다. 1. null 의 인스턴스를 호출할 경우. 2. null object의 필드를 수정하거나, 접근하려고 할 경우 3. null array(배열)에서 길이를 알려고 할 경우 4. null array를 수정하거나 접근하려고 할 경우 5. Throwable 값인 것처럼 null을 던질 경우. (해석을 잘 못하겠음..) 내가 궁금한 내용은 이거다. 그냥 다른 언어들처럼 사용하려고 해도 null을 던져주면 안되는 걸까? 예를들어 ‘null’을 가진 객체를 출력한다고 가정해보자 NullPointerException이 생기는 상황 예제1. 다음과 같은 클..