목록Language/Java (10)
Kim Jinung
1. 문자열 파싱 2. 정렬 방법 두 가지 정도 찾아두고 숙지해둘 것 + 정규표현식 자꾸 까먹는다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b2d3po/btsgEe3fvq6/hi3UxCRaM6jpZTYyQi5SV1/img.png)
Arrays ps를 하다보면 asList 메서드를 사용할 일이 꽤 잦다. 그런데 내부 구현이 어떻게 되어있는 걸까 뜯어본 적은 없다. 막연히 인자를 던져주면 리스트를 던져주는구나 싶었다. 그런데 가끔은 ArrayList로 래핑하기도 하고, 안 할때도 있다. 블랙박스는 위험하다. asList method Arrays 클래스의 asList메서드는 인자를 받아서 리스트 인스턴스를 반환한다. 나는 당연히 반환 객체의 타입이 ArrayList가 아닐까 생각했다. 그런데 값을 추가하면 UnsupportedOperationException이 발생한다. 내부 코드를 보면 반환 타입을 ArrayList로 준다. ??? Arrays.ArrayList type class 컬렉션 프레임워크의 ArrayList가 아니라, Ar..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wn3n1/btsgu7hzU7p/1saZdmAdk3l1uDthccDpH0/img.png)
Java Socket Programming Client-Server 구조에서의 소켓 프로그래밍 흐름 예시다. Server example import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println("message= "+str)..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VN3vq/btsgiDhVINB/kJh8FxI3DR01syLrLYaIok/img.png)
Multithreading 프로세스에서 스레드 여러 개를 동시에 실행하는 기법이다. Thread 프로세싱의 가장 작은 유닛 단위로, 가벼운 서브 프로세스에 해당한다. 멀티쓰레딩과 멀티프로세싱 모두 멀티태스킹을 위해 사용한다. 보통 멀티쓰레딩을 멀티프로세싱보다 더 많이 사용한다. 멀티쓰레딩은 공유 메모리 영역을 사용하기 때문에 별도의 메모리 영역을 분리해서 사용하지 않는다. 따라서 컨텍스트 스위칭(Context Switching) 과정에서 멀티프로세싱 보다 더 적은 시간을 필요로 한다. (오버 헤드가 적다.) JVM의 메모리 영역에는 Heap과 Thread stack이 존재한다. Heap은 쓰레드들이 공유하는 메모리 영역이다. Thread stack은 개별 쓰레드마다 할당 받고 프레임을 생성해서 지역 변수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bnibPV/btsgdBEkUA5/6KZWGLZ2L5qBxdMGPtWmX0/img.png)
Hierarchy of Java Exception classes Overview Throwable 클래스가 모든 예외 클래스의 루트 클래스다. Throwable 클래스 하위에는 두 개의 클래스가 존재한다. Exception Error Types of Java Exceptions 1) Checked Exception 컴파일 타임에 체크되는 에러다. Error와 Runtime exception을 제외하면 모두 여기에 해당한다. IOException, SQLException, ClassNotFoundException등이 체크 예외에 해당한다. 현재 메서드에서 예외를 처리하지 못하면 반드시 예외를 발생시켜서 던져주어야 한다. 2) Unchecked Exception Runtime exception을 상속하는 예..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJr824/btsgdBJ7xnu/TJ3nTyDv6u776HoWD2JWBK/img.png)
Collection 객체의 그룹을 저장하고 조작할 수 있는 아키텍처를 제공하는 프레임워크다. 인터페이스와 구현체가 존재하며, 인터페이스를 구현하는 1개 이상의 구현체가 존재한다. 자바답게 인터페이스(List, Queue, Set, Deque)를 제공하고, 이에 대한 구현체 클래스를 제공한다. 단순히 해당 프레임워크의 구현체가 제공하는 메서드에 집중하기 보다는 자바에서 왜 이런 인터페이스 상속 구조를 만들었고, 각 구현체는 어떠한 방법을 사용해서 인터페이스를 구현했는 가에 초점을 맞추는 게 중요할 것으로 보인다. Hierarchy of Collection Framework Interface Iterable interface 이터러블 인터페이스는 자료구조에서 순방향으로 요소를 탐색하는 스펙을 정의한다. Co..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SKs2T/btsgaMZT10W/WyTsAeuOGGHpOEMXpjzOok/img.png)
1. String String은 다음 인터페이스를 모두 구현한다. Serializable: 직렬화 Comparable: 값 비교 CharSequence: 문자 시퀀스 CharSequence Characters의 문자 시퀀스를 표현할 때 사용한다. 다음 세 가지 클래스가 해당 인터페이스를 구현한다. String StringBuffer StringBuilder 일반적으로 프로그래밍 언어에서 String은 Character의 시퀀스다. 그런데 자바의 String은 캐릭터의 시퀀스를 표현하는 '객체'다. 2. How to create String obj? String literal new Keyword 1) String Literal String s1 = "welcome"; String s2 = "welcome..
Primitive type int, char, boolean 등이 그 예시다. 원시 타입의 가장 큰 특징은 다음과 같다. null 값을 가질 수 없다. 값 그 자체다. Wrapper class 래퍼 클래스(Wrapper class)의 메커니즘은 원시 타입을 객체로 변환하는 것이다. 따라서 다음과 같은 특징을 가진다. null 값을 가질 수 있다. 객체를 참조하는 값을 가지고 있다. Why? 왜 굳이 원시 타입을 래핑하는 래퍼 클래스가 별도로 존재할까? 개인적인 추측으로는 자바가 객체 지향 프로그래밍 언어이기 때문이라고 생각한다. 함수형 프로그래밍 언어는 값을 함수의 파라미터로 넘긴다. 범위는 지정하지 않는다. 값을 넘기면 Call by value에 기반하여 계산하고 그 결과를 반환한다. 이때 결과는 파라..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FFCmL/btse9ozi0GV/dRCNp5oIqIQBRCDIyyr5Tk/img.png)
1. JDK, JRE 그리고 JVM JRE(Java Runtime Environment)는 자바 바이트 코드를 실행하기 위한 JVM을 제공한다. 그리고 JDK는 추가적으로 .java 파일을 바이트 코드로 컴파일 하기 위한 javac(java compiler)와 개발에 필요한 기타 유틸리성 파일 들을 제공한다. 2. JVM JVM은 크게 세 부분으로 구분할 수 있다. Class loader Memory area Execution engine Class loader 자바 컴파일러는 .java 파일을 컴파일한다. 그 결과로 .class 확장자를 가진 바이트 코드가 생성된다. 해당 바이트 코드를 JVM 메모리 영역에 올려주는 역할을 하는 게 클래스로더다. 빌트인 클래스 로더는 3가지가 존재한다. 순서대로 더 상..
1. Software build 소스 코드를 PC에서 실행할 수 있는 독립된 형태로 가공하는 과정을 의미한다. 이 과정에는 소스 코드를 머신 코드로 변환하는 컴파일, 패키징, 의존성 라이브러리 관리, 테스트가 포함된다. 예를 들어서 자바 애플리케이션이라면 빌드를 통해 하나의 jar 파일이 생성 된다. iOS 앱이라면 빌드를 거쳐서 소스 코드가 하나의 실행 가능한 앱이 된다. 이것이 빌드다. 2. Build automation 소프트웨어 개발 과정에서 수없이 많은 build를 거치게 된다. Build automation의 목적은 이 반복 과정을 자동화 하여 생산성을 높이는 것이 목적이다. (빌드 자동화 도구들은 빌드 순서 커스터마이징을 제공하기도 한다.) 3. Build automation tools Bu..