[Java] 프로세스와 스레드 - 1
·
BackEnd/Java
프로세스와 스레드멀티태스킹과 멀티프로세싱만약 프로그램을 두개 이상 동시에 실행한다고 가정해보자. 연산을 처리할 수 있는 cpu 코어는 1개만 있다고 가정한다. 하나의 cpu 코어가 매우 빠르게 두개의 작업을 번갈아 가면서 처리하게 되면 사람은 이것이 같이 동시에 실행된다고 느끼게 된다. 이렇게 각 프로그램의 실행 시간을 분할해서 마치 동시에 실행되는 것 처럼 하는 기법을 시분할 기법이라고 한다. 그리고 이렇게 하나의 컴퓨터 시스템이 동시에 여러 작업을 수행하는 것을 멀티태스킹 이라고 한다. cpu에 어떤 프로그램이 얼마만큼 실행될지는 운영체제가 결정하는데 이것을 스케줄링 이라고 한다. 이때 단순히 시간으로만 작업을 분할하지는 않고, cpu를 최대한 활용할 수 있는 다양한 우선순위와 최적화기법을 사용한다...
[Java] 컬렉션 프레임워크 와 배열, 리스트
·
BackEnd/Java
배열과 같이 여러 데이터(자료)를 구조화해서 다루는 것을 자료 구조라 한다.자바는 배열 뿐만 아니라, 컬렉션 프레임워크라는 이름으로 다양한 자료 구조를 제공한다. 배열배열에서 인덱스 사용하면 매우 빠르게 자료를 찾을 수 있다.데이터를 넣거나 뺄때 처음부터 찾는게 아니라 인덱스 번째의 주소 값을 정확하게 입력하여 찾아가면 바로 찾을 수 있고, 그렇기 때문에 인덱스를 이용하면 빠르게 찾을 수 있음배열을 찾는 공식은 다음과 같다배열의 시작 참조 + (자료의 크기 * 인덱스 위치)만약 arr이라는 배열의 3번째 값을 찾는다고 했을때 공식을 적용하면 다음과 같다.(배열은 0번째 부터 시작이기 때문에 3번째가 곧 2번째 인덱스)arr[2] = x100(참조주소 예시) + (4byte(int) * 2) = 108결론..
[Java] 예외 계층과 실무에서의 예외 처리 방법
·
BackEnd/Java
언체크 예외는 체크 예외와 기본적으로 동일하다. 차이가 있다면 예외를 던지는 throws를 선언하지 않고 생략 할 수 있다. 생략한 경우 자동으로 예외를 던진다.RuntimeException을 상속받은 클래스는 언체크 예외가 된다.언체크 예외는 컴파일러가 체크 안하기 때문에 throws로 나열하지 않아도 됨.예외도 객체다. 필요한 필드와 메서드를 가질 수 있다.try catch finallytry -> 정상적인 흐름catch -> 예외 흐름finally -> 마무리 흐름finally 선언시 try catch블록의 흐름에 상관없이 finally 안의 로직은 반드시 실행하게 된다.try { client.connect(); client.send(data); } catch (NetworkCl..
[Java] Exception과 throw, throws, try catch 가 언제 사용 되는가
·
BackEnd/Java
저는 이전에 예외를 처리할 때, 그저 컴파일러에서 추천해주는 해결법으로 alt enter 클릭으로 수정하는 것 밖에 안했습니다. 에러를 대응 하는 방법을 잘 몰랐는데 이번에 공부하면서 알게 되었기 때문에 포스팅 합니다.Exception자바의 예외 처리는 다음 키워드를 사용한다.try, catch, finally, throw, throwsObject -> Throwable -> ExceptionRuntimeException을 제외한 Exception을 상속한 예외는 모두 컴파일러가 체크한다RuntimeException은 언체크 예외, 애플리케이션 구동중 발생하는 에러알 수 없는 에러이기 때문에 좋지못하다.예측 불가능한 에러는 좋지못한 에러 -> Unchecked Exception예측 가능한 컴파일 단계에서..
[DB] 효율적인 설계를 위해 어떤 SQL을 사용해야 할까? RDBMS vs NoSQL과 DB에서의 수직 확장(scale-up)과 수평 확장(scale-out)
·
BackEnd
1. RDBMS의 장단점 적어보기장점RDBMS는 스키마에 따라 데이터를 정의하기 때문에, 명확한 데이터 구조를 가짐각 데이터들은 중복없이 한 번만 저장하여 무결성을 유지할 수 있음.단점테이블-테이블 간의 쿼리를 작성할때, RDBMS는 JOIN문을 사용하게 되는데, 이 때문에 복잡한 쿼리가 만들어 질 수 있음.외래키를 사용하여 테이블을 구성하는 경우가 매우 빈번하기 때문에, scale-out 즉, 서버를 늘리는 과정이 매우 복잡하고 어려움데이터가 스키마로 정의되어 있기 때문에 유연한 데이터 관리가 힘듬.2. NOSQL의 장단점 적어보기장점NOSQL은 RDBMS의 단점과 반대로 데이터를 스키마로 정의하지 않기 때문에 자유로운 데이터 구조를 가질 수 있으며, 이는 사용자 입장에서 유연한 데이터 관리를 할 수 ..
[Java] 이것이 자바다 - 3장 연산자
·
BackEnd/Java
오버플로우(overflow)와 언더플로우(underflow)오버플로우는 타입이 허용하는 최대 값을 벗어나는 것을 말한다. 반대로 언더플로우는 타입이 허용하는 최소값을 벗어나는 것을 말한다.정수 타입 연산에서 오버플로우 또는 언더ㅡㄹ로우가 발생되면 실행 에러가 발생할 것 같지만, 그렇지는 않고 해당 정수타입의 최소값 또는 최대값으로 되돌아간다.예를 들어, byte 타입의 최대값인 127에 1을더하면 오버플로우 -127에 1을 빼버리면 언더플로우다.정확한 계산은 정수연산으로산술 연산을 정확하게 계산하고 싶다면 실수 타입을 사용하지 않는 것이 좋다.정확한 연산을 원한다면 정수연산으로 변경해서 다음과 같이 계산하는 것이 좋다.나눗셈 연산의 오류처리나눗셈 또는 나머지 연산에서 좌측 피연산자가 정수이고 우측 피연산..
[Java] 이것이 자바다 - 2장. 변수와 타입
·
BackEnd/Java
프로그래머가 직접 입력한 값 - 리터럴(literal)Long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용된다.은행이나 과학분야에서 사용함기본적으로 컴파일러는 정수 리터럴을 int타입 값으로 간주하기 때문에 int 타입을 초과하는 리터럴은뒤에서 소문자l이나 대문자L을 붙여 long타입 값임을 컴파일러 에게 알려줘야함하나의 문자를 작은 따옴표로 감싼 것을 문자 리터럴이라고 한다.유니코드로 변환되어 저장된다.유니코드 ?세계 각국의 문자를 0 - 65535 숫자로 매핑한 국제 표준 규약double floatdouble은 float보다 약 2배의 유효 자릿수를 가지기 때문에 보다 정확한 데이터 저장이 가능하다.double이라는 이름도 float보다 2배의 정밀도를 갖는다는 의미String 타입은 자바 기..
[Spring] 스프링이 사랑한 디자인 패턴 - 1
·
BackEnd
디자인 패턴이란?디자인 패턴이란 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것입니다. 디자인 패턴 계의 교과서로 불리는 [GoF의 디자인패턴]에서는 객체지향적 디자인 패턴의 카테고리를 "생성 패턴(Creational Pattern)", "구조 패턴(Structural Pattern)", "행동 패턴(Behavioral Pattern)" 3가지로 구분하고 있습니다. 어댑터 패턴(Adapter Pattern) 어댑터를 번역하면 변환기 라고 할 수 있다. 변환기의 역할은 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다. 어댑터 패턴은 개방 폐쇄 원칙을 활용한 설계 패턴이라고 할 수 있다. 어댑터 패턴은 합성, 즉 객체를 속성으로 만들어서 참조하..