부제: 인터페이스와 추상클래스의 비교 인터페이스와 추상클래스의 차이점. JAVA 서적 아무거나 펴보면 무조건 나오는 내용이다. 혹시 당신은 그냥 문법적인 차이만 대충 알고 넘어가지 않았는가? 이번 글에서는 인터페이스와 추상클래스를 비교해보겠다. 1. Abstract Class 클래스의 형태 중 하나이다. 클래스는 일반 클래스(concrete class)와 추상 클래스(abstract class)로 나뉜다. 클래스를 abstract로 정의한 경우 그 클래스는 추상 클래스가 된다. 추상 클래스의 선언 예는 아래와 같다. public abstract class Human { public abstract void sleep(); public abstract int food(); } 추상 클래스가 일반 클래스와 ..
부제: 트랜잭션 격리수준, 트랜잭션 뜻 Transaction. 영한사전에 검색하면 '거래'라는 뜻이다. 전산학(Computer Science)에서 일컫는 트랜잭션(Transaction)은 조금 다르다. 쉽게 풀어쓰자면... 모든 명령어의 성공 또는 실패를 한번에 처리한다는 뜻이다. 조금 더 어렵게 설명하면 데이터베이스의 상태를 바꾸는 기능을 수행하기 위한 작업의 단위 이다. 이 기능이 정상적으로 동작하려면 성공 또는 실패가 한번에 일어나야 한다. 즉, 트랜잭션 처리가 잘 끝나야 한다. 지금부터 트랜잭션 처리가 왜 필요한지 알아보자. 1. 트랜잭션 처리가 필요한 이유. 가장 많이 쓰이는 예제. 계좌 이체를 예로 들어보겠다. 철수가 영희에게 1000원을 송금하는 상황은 아래와 같이 요약할 수 있다. 철수의 ..
JAVA는 C와 달리 개발자가 명시적으로 메모리를 건드리지(참조하지) 않는다. JAVA는 메모리를 Garbage Collection이라는 알고리즘으로 관리하며, 개발자가 메모리를 관리할 필요가 없도록 한다. (직접 관리하면 오히려 더 안좋은 경우가 많다.) Garbage Collection은 말 그대로 '쓰레기를 정리하는 작업'이다. 그리고 JAVA의 메모리 입장에서 '쓰레기'는 곧 객체, 다시 말해서 '필요 없는 객체'이다. 1. GC와 Heap Garbage Collection을 본격적으로 알아보기전에 JVM의 Runtime Area를 떠올려보자(생각이 안나거나, 잘 모르는 사람은 여기를 참고하자.) Runtime Area의 영역들은 스레드가 시작할 때 생성되는 경우가 있는가 하면, JVM이 시작할 ..
부제: Checked Exception Unchecked Exception 비교 프로그램은 항상 개발자가 의도한대로 동작하지 않는다. 이것들을 오류(Error)나 버그(Bug)로 자주 일컫는다. JAVA에서는 '오류'를 다루기 위해 Throwable 이라는 클래스를 활용한다. Oracle은 Throwable에 대해 아래와 같이 소개했다. The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can ..
객체 중에는 시스템 전체에 딱 하나만 존재해야 유리한 것들이 있다. 대표적으로 스레드 풀이나 캐시, 각종 설정정보 등이 있다. 이들의 인스턴스가 두 개 이상 존재하게 되면 시스템에 좋지 않은 영향을 끼친다. (작게는 자원낭비, 크게는 프로그램 오류) 객체(인스턴스)를 시스템 전체에 딱 하나 존재하도록 처리하기 위해 전역변수를 사용해도 되지만, 전역변수는 원하는 때에 생성할 수 없다는 단점이 있다. 그래서 사용하는 것이 싱글턴패턴(Singleton Pattern)이다. 싱글턴 패턴을 어떻게 구현하는지 지금부터 '자세히' 알아보자. 먼저, 싱글턴패턴은 시스템 전체에 딱 하나만 존재하게 하기 위해 생성자를 아무나 접근할 수 없게 막고, 스스로 인스턴스를 관리한다. 아래 코드를 보면 명확해 질 것이다. publ..
String과 StringBuilder, StringBuffer는 모두 문자열을 저장 및 관리하는 클래스이다. 아래와 같은 방식으로 생성 가능하다. String str1 = new String("abc"); String str2 = "abc"; StringBuilder str3 = new StringBuilder("abc"); StringBuffer str4 = new StringBuffer("abc"); 참고로, StringBuilder와 StringBuffer의 생성자의 파라미터로 CharSequence 인터페이스를 구현한 모든 클래스를 사용할 수 있다. CharSequence를 구현한 클래스로는 CharBuffer, String, StringBuffer, StringBuilder가 있다. Strin..
컴파일할 때는 문제가 없던 프로그램도 동작 도중에 종종 오류가 발생한다. 사용자가 항상 개발자의 생각대로 프로그램을 사용하지 않기 때문이다. 숫자만 입력해야하지만 문자열을 입력하기도 하고, 파일을 업로드하기 전 파일의 이름을 지정하지 않기도 한다. 이럴 때 발생하는 오류를 사전에 방지하는 것은 중요하다. 그런데 개발자가 이러한 오류가 발생할 때마다 프로그램이 종료되는 것을 원치 않을 수 있다. 오류를 무시하고 싶을 수도 있고, 그 오류가 발생 했을 때 수행할 적절한 동작을 직접 정의하고 싶을 수도 있다. 이럴 때 활용하는 것이 try-catch-finally 구문이다. public class Main { public static void main(String[] args) { int [] arr = ne..
기술면접에 대비하여 정리한 내용 중, 하나의 포스팅으로 제작하기에는 내용이 짧거나, 상세히 작성이 어려워(나의 능력부족) 포스팅으로 작성하지 못한 질문 모음. 1. Servlet에 대해 답변해 보세요. Servlet: 자바 플랫폼에서 웹 앱을 개발할 때 사용하는 핵심기술. 컨트롤러와 뷰의 역할 분담이 가능해진다. 자바 API를 모두 사용할 수 있으며 다양한 서버 환경에서 실행 가능하다. 스레드를 기반으로 한다. Servlet Container: Servlet을 서버에서 실행하기 위한 서버 프로그램(서버는 서블릿 자체를 직접 실행할 수 없기 때문). JVM을 내장하고 있다. 2. 서블릿의 라이프 사이클에 대해 설명하세요. init(): 컨테이너는 서블릿 인스턴스를 생성한 다음 init() 메소드를 호출한다..
기술면접에 대비하여 정리한 내용 중, 하나의 포스팅으로 제작하기에는 내용이 짧거나, 상세히 작성이 어려워(나의 능력부족) 포스팅으로 작성하지 못한 질문 모음. 1. DB에서의 Commit와 Rollback 이란? Commit: 하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산 Rollback: 하나의 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소(Undo)시키는 연산. 같이보면 좋은 글: 트랜잭션에 대하여(클릭) 2. DBMS에 대해 설명해보시오. 데이터베이스라는 데이터의 집합을 만들고, 저장 및 관리할 수 있는 기능들을 제공하는 응용프로그램이다. 3. PK, FK, E..
이번 포스팅에서는 웹 어플리케이션의 동작에서 핵심적인 역할을 하는 WAS에 대해 다룬다. 웹 서버(Web Server)와 혼동하는 사례가 잦아, 면접 전에 정리할 필요가 있는 개념이다. 먼저 이해를 돕기 위해 웹 아키택처에 대한 이야기를 꺼내려고 한다. ▶ 2-tier 아키택처의 구조도. 클라이언트가 서버의 DB에 직접 접속한다. 3-tier(혹은 N-tier) 아키택처가 등장하기 전, 웹 애플리케이션들은 주로 2-tier 아키택처를 활용했다. 클라이언트가 직접 서버에 접속하여, 서버의 자원을 활용하는 방식이었으므로 개발이 편리했다. 하지만 2-tier 아키택처에서의 웹 애플리케이션은 보안에 취약했고, 유지보수도 어려웠다. 그래서 등장한 것이 3-tier 아키택처이다. ▶ 3-tier 아키택처의 구조도 ..