-
자바 개발자가 알아야하는 25가지 상식!Java & 배경지식/기본상식 2020. 7. 19. 23:27반응형
1. platform independent language(플랫폼 독립 언어)
2020/06/07 - [Java/기본상식] - 자바, JVM, JDK, JRE 차이
2. JVM란 무엇이며 JRE의 차이점은 무엇인가?
2020/06/07 - [Java/기본상식] - 자바, JVM, JDK, JRE 차이
3. Autoboxging과 unboxing의 개념
데이터 타입 종류
- Primitive(가벼운 데이터)
- bollean, char, byte, shourt, int, long, float, double
- Stack에 존재
- Wrapper Object(무거운 데이터)
- Boolean, Character, Byte, Shourt, Integer, Long, Float, Double
- Heap메모리에 존재
위의 데이터는 J2SE 5 전에는 다른 데이터형이었다. 하지만 J2SE 5 부터 Autoboxing과 Unboxing을 통하여 형변환을 자동해준다.
Autoboxing
Primitive데이터를 Wrapper Object로 변환해주는 기능
public void autoboxingTest(){ int a = 2017; Integer b = a; }
Unboxing
Wrapper Object를 Primitive로 변환해주는 기능
public void autoboxingTest(){ Integer a = new Integer(2017); int b = a; }
AutoBoxing과 Unboxing을 사용함에 따른 장점
개발자는 보다 짧은 코드를 작성하고, 이해가 빠른 코드를 작성하는데 도움이 된다.
4. 자바의 메모리 구조 설명( Stack, Heap)
2020/04/26 - [Java/기본상식] - JVM의 메모리 구조
5. String, StringBuffer, StringBuilder의 차이
2020/03/19 - [Java/기본상식] - String, StringBuffer, StringBuilder 차이
6. 오버라이드와 오버로딩의 차이
Overriding
- 상속관계에서 부모클래스에서 상속받은 클래스를 자식 클래스가가 재정의 하는 것
- parameter 및 return type는 같아야 한다.
- Java 1.5 이상부터는 return type이 같은 클래스나 subclass가 될 수도 있다.
- 결론
- 자식 클래스가 필요에 의해 메소드 구현을 다양하게 하기 위해서
Overloading
- 동일한 이름을 가진 메소드들이 같은 클래스에 존재하고 파라미터에 따라서 호출이 되는 것
7. String 객체를 new()로 만드는 거와 iteral로 만드는 것의 차이?
new()로 만드는 것
Heap 메모리에 존재
String s1 = new String("Java"); String s2 = new String("Java");
String literal - String Pool
Heap 메모리 안에 String Pool에 존재하며, 재사용이 가능하다.
String s3 = "Java"; String s4 = "Java";
JDK 1.7 버전부터는 Heap 메모리내에 String Pool영역이 존재한다.
s3와 s4는 같은 객체를 보고있다.
s1,s2 / s3,s4를 알고 싶으면 ==(operator) 와 equals() method를 이해하고 있으면 알 수가 있다.
==(operator)
- 값이 아닌 주소값을 비교하는 연산자
equals() method
- 값을 비교하는 연산자
s1 == s2 // false
s1.equals(s2) // true
s3 == s4 // true
s3.equals(s4) // true8. static의 개념은?
JVM에 의해서 클래스가 로딩되는 처음 순간에 자동으로 메모리에 올라간다.
객체생성 이전에 로딩된 메모리(static 메모리 영역)에 존재하기 때문에 객체 생성이전에 클래스로 접근이 가능하다.
static variable
- 객체생성 이전에 클래스 이름으로 접근이 가능하다.(클래스 변수이기 때문에)
- 객체를 생성하지 않아도 static자원에 접근이 가능하다.
- 사용할 때
- 전역 변수를 선언할 때
static method
- 객체의 생성없이 호출이 가능하지만 객체에서는 호출이 불가능
- 자주사용하는 메소드들을 객체생성없이 사용할 때
- 사용할 때
- starting point
- public static void main(String args)
- popula methods
- Math.round()
- starting point
9. abstract class와 interface의 차이는?
Generalization
하위 클래스를 토대로 상위 클래스를 설계하는것
Specialization
상위 클래스를 토대로 하위 클래스를 설계하는 것
abstract class
- 슈퍼 클래스에서 어느정도 구현이 되어있고, 서브클래스를 디자인 할 때 필요한 부분만 구현을 하고, 안할 수도 있을 때 사용 즉 구현은 서브클래스가 하게 하는 것
- single inheritance 이다.
- 모든 접근제어자 사용 가능
- abstract method 및 concrete method만 사용가능
Interface
- 실질적인 구현이 없는 클래스이다.
- 인터페이스를 받아 구현한 구현 클래스들은 인터페이스만 보면 기능을 쉽게 알 수 있다.
- 인터페이스 내에 변수를 선언하면 public static final 변수로 선언(상수로만)된다.
- 상속이 아닌 구현의 개념이다.
- public 만 사용가능
- abstract method만 사용가능
abstract method는 메소드명 만 적어놓고 실제적으로 구현을 하지 않는 것이고,
concrete method는 구현을 한 메소드를 뜻한다.
10. 자바의 Exception이란?
Exceiption
- 코드가 실행할 때 발생되는 예상하지 못한 상황(NullpointException)
- 코드로 수정이 가능
- 예기지 못한 상황에서 발생
- checked Exception
- 컴파일 타임에 발생
- unchecked exception
- 런타임에 발생
Exception Handling
try, catch block
- 예외처리를 직접 하는 경우
public void exceptionTryBlock(){ try{ }catch(Exception e){ System.out.println("Exception); } }
throws
- 자신을 호출하는 메소드에 예외처리의 책임을 넘기는 행위
public void exceptionTryBlock() throws Exception{ }
Error
- 상태가 심각한 경우
- 회복이 안되는 경우
- OutOfMemory Error
- server exception
11. Exception과 Error의 차이 및 종류
Exception
- checked exception
- Complie time exception
- SQLException
- IOException
- unchecked exception
- Runtime exception
- NullpointException
- ArrayIndexOutOfBoundException
Error
- server exception
- OutOfMemory
12. throw와 throws 그리고 Java Exception Handing
exception handling method
- try, catch
- throws
pass handling reponsibility to caller(throws)
- 자신을 호출하는 메소드에 예외처리의 책임을 넘기는 행위
throw
- 개발자가 인위적으로 에러를 발생
public void call(){ try{ throw new Exception("Explicit Exception"); } catch (Exception e){ e.printStackTrace(); } }
public void call(){ throw new Exception("Explicit Exception"); }
13. Java Stream이란?
- 데이터 소스나 파일을 연속적으로 연결해서 데이터를 읽거나 쓰는 것
- package java.io, java.nio 패키지에 존재
byte Stream character stream reading/writing of nay bytes(이미지나 미디어 파일) reading/writing of characters(text file) 8 bit 16 bit(자바의 charater Unitcode를 사용하기 위하여 사용) InputStream/OutputStream classes Reader/Writer classes 14. finaly block이란 무엇이며? 실행여부가 어떻게 되는지?
에러처리는 위에서 아래로 실행이된다.
try ~catch 문에서 마지막에 존재하는 finally는 에러 상태에 상관없이 무조건 실행이된다.
finally는 보통 리소스를 관리하는 쪽에서 많이 사용한다.
15. ArrayList와 LinkedList의 차이
2020/03/19 - [Java/기본상식] - 자바의 자료구조
16. Enumeration과 Iteratetor의 차이
Enumeration과 Iteratetor는 Java에서 제공하는 Conllection에 대해 순차적으로 접근 한다.
Enumeration Iterator 초기 Collection만 지원(Vector, HashTable) 모든 Conllection 지원 1. Snap-shot
2. 원본과 별개로 현재 상태를 남겨서 처리
3. Conllection에 순차적으로 접근하는 도중 데이터가 변하는 등의 사건이 생기면 원본과 다른 결과가 발생이 될 수 있다.1. Fail-fase,
2. Collection에 순차적으로 접근하는 도중 데이터가 변하는 등의 사건이 생기면 concurrentModificationException이 발생된다.hashMoreElemenets(), nextElement() hashNext(), next(), remove() Enumeration 예제
public void iterateA(Vector v){ Enumeration e = v.element(); Object obj; while(e.hasMoreElements()){ obj = e.nextElement(); } }
Iterator 예제
public void iterateB(ArrayList a){ Iterator i = a.iterator(); Object obj; while(e.hasNext()){ obj = e.next(); } }
17. SimpleDateFormat이란?
https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class ConvertDataFormat { public void convertDataFormat() { //////////////////////////////// // format : Date --> String //////////////////////////////// String pattern = "*** EEEE MMMM *** yyyy-MM-dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.KOREA); String now = sdf.format(new Date()); System.out.println(now); //////////////////////////////// // parse : String --> Date //////////////////////////////// String future = "*** 일요일 8월 *** 2017-08-28 16:03:22"; Date strToDate = null; try { strToDate = sdf.parse(future); } catch (Exception e) { // TODO: handle exception } System.out.println(strToDate); } }
18. marker interface란 무엇인가?
- 상수도 없고 메소드는 완전히 비어있는 인터페이스
- 특별한 행동을 컴파일러나 JVM에 알려주는 기능
- 태그 인터페이스라 불림
사용하는 곳
Serializable
컴파일러는 컴파일시 해당클래스에서 생성되는 객체는 나중에 Stream을 통한 객체 직렬화를 통해서 통신할 수 있게 한다.
Clonnable
Clonnable marker interface를 구현한 객체인 경우에만 JVM이 복제하는것을 도와준다.
SingleThreadModel
해당 객체가 default 값이 Single Thbread로 잡혀있어 하나의 쓰레드로 사용
Remote
RMI(Remote Method Invocation) 원격 객체로 사용하는 경우
19. java의 Thread란?
2020/05/02 - [Java/기본상식] - Synchronized
2020/07/16 - [백기선(인프런 강의)/더 자바, Java 8] - 자바 Concurrent 프로그래밍 소개
20. Java Thread에서 발생되는 deadlock이란?
2020/05/02 - [Java/기본상식] - Synchronized
2020/07/16 - [백기선(인프런 강의)/더 자바, Java 8] - 자바 Concurrent 프로그래밍 소개
21. main method란?
public static void main(String[] args) { }
static publc void main(String[] args) { }
public static final void main()- 프로그램의 시작점이다.
- static은 메모리에 동일한 메소드명은 가질 수 없다.
- static과 public을 바꾸어도 상관이 없다.
- 메소드에 final을 붙이면 메소드 오버라이딩을 하지 못하게 하는 것이다.
22. PreparedStatement 란?
PrearedStatement
- 같은 기능을 작동한다면 Statement보다 PreparedStatement가 성능이 좋다.
- PreparedStatement는 Statement의 서브 인터페이스이다.
- PrepatedStatement는 미리 컴파일 되어있고, 실행시 파라미터만 넘기는 형태
- 미리 컴파일이 되어있기 때문에 쿼리와 파라미터를 같이 넘기는 Satement보다 안전하다.
CallableStatement
- CallableStatement는 PreparedSatement의 서브 인터페이스이다.
- DB에 이미 저장되어있는 procedure나 function을 실행시킨다.
- 자바에서 단순히 호출하는 구조이기 때문에 어플리케이션에서는 퍼포먼스가 좋다.
23. RMI 아티텍쳐란?
RMI(Remote Method Invocation)
- 다른 JVM과의 통신을 위해서 설계
- 자바 프로그램 간의 원격 통신
기본적인 RMI 아티텍쳐
예제
Java RMI Server
- java.rmi.Remote를 확장하는 사용자 인터페이스 선언
- RemoteException을 발생시켜 사용자 인터페이스 구현
- 원격 객체를 RMI 레지스트리에 바인딩
public interface HelloInterface extends Remote { public String sayHello(String name) throws RemoteException; }
public class HelloImpl extends UnicastRemoteObject implements HelloInterface{ protected HelloImpl() throws RemoteException { super(); } @Override public String sayHello(String name) throws RemoteException { return "Hi " + name; } }
public class MainRun { public static void main(String[] args) { try { Naming.bind("rmi://localhost/Myremote", new HelloImpl()); } catch (MalformedURLException | RemoteException | AlreadyBoundException e) { e.printStackTrace(); } } }
Java RMI Client
- RMI 레지스트리에서 원격 객체 검색
- 원격 참조를 통해 원격 메소드 호출
public class HelloClkient { public static void main(String[] args) { try { HelloInterface hello = (HelloInterface) Naming.lookup("rmi://localhost/Myremote") } catch (MalformedURLException | RemoteException | AlreadyBoundException e) { e.printStackTrace(); } } }
정리
- 분산 환경에서 메소드 호출
- RMI 서버는 bind ()에 의해 원격 객체를 RMI Registry에 등록
- RMI 클라이언트는 RMI Registry에서 lookup()으로 원격 참조를 조회
- 서버에서 복잡한 비즈니스 로직을 중앙 집중화
24. JDBC Connection이란 ?
- 데이터베이스와 연결하고 쿼리를 실행하는 Java API
- 데이터베이스 독립적 연결을 위한 업계 표준
JDBC Strep
- 드라이버로드
- 연결 설정
- Statement 생성 (쿼리 작성)
- 쿼리 실행
- 결과를 ResultSet으로 처리
- JDBC 연결 닫기
예제
25. 이미지나 미디어 파일들은 어떻게 데이터베이스에 저장이되는가?
Disc approach
- 디스크에 실제 이미지 저장
- DB에서 데이터를 참조 가능(이름을)
- 큰 이미지 크기에 적합
- 더 나은 성능
- 멀티 데이터베이스는 공유가능
Disc approach 예제
Database approach
- 데이터베이스에 실제 이미지 저장
- 이미지 크기가 작을 때
- BLOB column in database
- BLOB - 이진 대형 객체 (Binary). 이미지, 동영상, MP3 등..
- setBinaryStream()을 이용
Database approach 예제
출처
반응형'Java & 배경지식 > 기본상식' 카테고리의 다른 글
HTTP와 HTTPS란? (0) 2021.03.11 Arrays.sort()와 Arrays.parallelSort() 내부 알고리즘 (0) 2020.08.09 바이트코드 조작 (0) 2020.06.07 클래스 로더 (0) 2020.06.07 자바, JVM, JDK, JRE 차이 (0) 2020.06.07 - Primitive(가벼운 데이터)