목록CS 지식 (169)
개발놀이터
Q. 자바의 원시타입들은 무엇이 있으며 각각 몇 바이트를 차지하나요? A. boolean 1바이트, unsigned char 2바이트, byte 1바이트, short 2바이트, int 4바이트, long 8바이트, float 4바이트, double 8바이트입니다. 하지만 사실 JVM에 의존적이기 때문에 정확한 크기라기 보다는 대략적인 크기입니다.
우선 데이터베이스 격리수준을 들어가기 전에 우리는 트랜잭션에 대해서 간단한 이해가 필요합니다. 트랜잭션 트랜잭션은 데이터의 정합성을 보장하기 위한 기능입니다. 트랜잭션은 꼭 여러개의 변경 작업을 수행하는 쿼리가 조합됐을때만 의미있는 개념은 아닙니다. 트랜잭션은 논리적인 작업 셋 자체가 100% 적용되거나 또는 아무것도 적용되지 않아야 함을 보장해 주는 것입니다. 이러한 트랜잭션의 특징을 잘 나타내는 4가지 키워드가 있습니다. 바로 ACID 라고 하는 원자성 (Atomicity), 일관성 (Consistency), 격리성 (isolation), 지속성 (Durability)를 보장해야 합니다. ACID에 대한 자세한 설명은 아래와 같습니다. 원자성 (Atomicity) : 트랜잭션 내에서 실행한 작업들은 ..
Q. try-with-resources에 대해서 설명해주세요. A. try 안에 사용할 리소스 객체를 명시적으로 선언하여 사용하고, try블록 안에서 로직이 정상적으로 완료되었는지, 갑작스럽게 완료되었는지 여부와 관계없이 JVM에서 자동으로 자원을 반납해주는 기능을 하도록 Java7부터 도입된 기능입니다. https://coding-review.tistory.com/154 try-with-resouce Java7 버전 이전에는 다 사용하고 난 자원을 반납하기 위해서 try-catch-finally 구문을 사용했다. Java7 버전 이후에 추가된 try with resources 기능은 try구문에 리소스를 선언하고, 리소스를 다 사용하고 coding-review.tistory.com
Q. Java8에서 추가된 기능에 대해서 설명해주세요. A. Java8에서는 람다식, Stream API, Optional, 날짜 시간 API, StringJoiner 등이 추가되었습니다. 이후 추가 질문 시 대답 Q. 자세히 설명해주세요. A. 람다는 함수형 프로그래밍을 지원하기 위한 기능이고, Stream API는 고차함수를 지원합니다. Optional은 Null-Safety를 제공하며, Stream과 사용법이 유사합니다. 날짜 시간 API는 Joda-time 등의 라이브러리에서 영향을 받아 괜찮은 API가 되었으며, StringJoiner는 문자열을 간단하게 구분자로 합칠 수 있는 기능을 제공합니다. https://coding-review.tistory.com/151 람다식과 Stream API 람..
Q. CheckedException과 UncheckedException에 대해서 설명해주세요. A. 둘의 차이는 RuntimeException을 상속하는가의 여부에 따라 다릅니다. RuntimeException을 상속하면 UncheckedException이 됩니다. CheckedException은 예외가 발생 했을 경우 반드시 try / catch로 해결해야 하는 예외입니다. 처리하지 못하는 경우에는 throws를 통해 밖으로 던져야 합니다. UncheckedException은 말 그대로 컴파일러가 예외를 체크하지 않겠다는 의미입니다. 체크 예외와는 다르게 예외를 반드시 처리하지 않아도 되고 throws를 통해 밖으로 던지는 것 또한 생략해도 됩니다. 꼬리질문 Q. CheckedException, Unc..
Q. String, StringBuilder, StringBuffer에 대해서 설명해주세요 A. String은 불변입니다. StringBuilder와 StringBuffer는 이런 String의 특징때문에 사용하는 가변타입라고 볼 수 있습니다. StringBuilder와 StringBuffer는 Thread-safe 여부의 차이가 있습니다. StringBuilder는 Thread-safe 하지 않습니다. 따라서 Multi-Thread 환경에서 사용할 때는 String Buffer를 사용합니다.
Q. 원시타입과 참조타입의 차이에 대해 설명해주세요. A. 원시타입은 Java에서 단 8개밖에 존재하지 않는 타입입니다. 나머지는 모두 참조타입이라고 볼 수 있고, 참조 타입은 Object클래스이거나 이를 상속하는 클래스들로 이루어져 있습니다. 원시타입은 항상 값이 존재해야 합니다. 반면 참조타입은 null을 가질 수 있습니다. 그리고 멤버변수가 초기화될 때 원시타입은 기본값을 가지지만, 참조타입은 null을 가지는 차이도 있습니다. https://coding-review.tistory.com/143 원시타입과 참조타입 원시타입 원시타입은 정수, 실수 ,문자, 논리 리터럴등 실제 데이터 값을 저장하는 타입이다. int a = 10; 과 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모..
Q. 동일성(identity)과 동등성(equality)에 대해서 설명해주세요 A. 동일성은 객체의 주소를 비교하는 것이고, 동등성은 객체의 같음을 비교하는 것입니다. 기본적으로 자바에서는 Object 클래스에 정의된 equals() 메소드가 동등성을 비교합니다. 따라서, 개발자는 원한다면 equals() 메소드를 오버라이딩해서 동등성의 판단 기준을 정의해주면 됩니다. https://coding-review.tistory.com/141 동일성(identity)과 동등성(equality) 동일성 동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수 coding-review.tist..
Q. 객체지향의 5대원칙 (SOLID)에 대해서 설명해주세요. A. 객체지향의 5대원칙은 SOLID라고 불리며 각각 SRP, OCP, LSP, ISP, DIP로 이루어져 있습니다. SRP는 단일책임 원칙으로 한 클래스에 하나의 책임만 가져야 한다는 원칙입니다. OCP는 개방-폐쇄 원칙으로 확장에는 열려 있으나 변경에는 닫혀 있어야 한다는 원칙입니다. 이는 다형성을 활용해야 합니다. LSP 리스코프 치환 원칙으로 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 하는 원칙입니다. 리스코프 치환 원칙에 따르면 상위 타입을 상속해서 재정의 했을 때 프로그램이 깨지지 않아야 합니다. ISP는 인터페이스 분리 원칙으로 클라이언트는 자신이 사용하지 않는 메서드에 의존 관..
Q. 정적 (static) 이란 무엇인가요? A. static은 클래스 변수라고 하고 정적 변수라고도 합니다. static은 클래스로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됩니다. static 키워드를 사용해서 생성된 정적 멤버들은 PermGen이나 Metaspace에 저장되고 저장된 메모리는 모든 객체가 공유하면서 하나의 멤버를 어디서든지 참조할 수 있다는 장점을 가지고 있습니다. 하지만 GC의 관리 영역 밖에 있기 때문에 프로그램 종료시까지 메모리가 할당된 채로 남아있습니다. 따라서 너무 남발하면 시스템 성능에 악영향을 미칠 수 있습니다. 꼬리질문 Q. PermGen이나 Metaspace에 대해 설명해주세요. A. PermGen이나 Metaspace모두 메타정보를 모아두..