Programming Language
[Java] 네트워킹 (Networking) 1
[Java] 네트워킹 (Networking) 1
2021.12.05컴퓨터간의 관계를 서버와 클라이언트로 구분할 수 있다. 서비스를 제공하는 쪽이 서버이고 제공받는 쪽이 클라이언트가 된다. 하나의 서버가 여러 가지 서비스를 제공하기도 하고, 하나의 서비스를 여러 대의 서버로 제공하기도 한다. 서버는 서버 일만, 클라이언트는 클라이언트의 일만 하는 모델을 서버기반 모델이라고 한다. 파일 공유 시스템(Torrent)에서 많이 사용하는 모델으로 P2P 모델이 있다. 각각의 클라이언트들이 서버의 역할도 수행하는 모델이다. 우리는 보통 클라이언트의 역할을 한다. 서버에 접속하기 위해서는 특별한 경로, 특별한 식별자가 필요한데 이를 IP주소라고 한다. 이 IP주소를 바탕으로 컴퓨터들을 구분한다. IP주소는 4바이트와 6바이트로 나타낼 수 있는데, 원래는 4바이트를 많이 사용했는데 ..
[Java] 입출력 (I/O) 2
[Java] 입출력 (I/O) 2
2021.11.29지난 시간에 바이트기반 스트림에 대해 알아봤으니 이번에는 문자기반 스트림에 대해 알아보자. 바이트기반 스트림과 문자기반 스트림은 매우 유사하다. 집중해서 봐야 할 부분은 byte[] 에서 char[]로 바뀌었다는 점이다. 단위만 문자 단위로 쓰는구나... 라고 생각하고 공부하자. 위쪽 부분에서 FileInputStream은 바이트단위로 처리하고, FileReader는 문자 단위로 처리한다. FileInputStream을 통해 파일 내용을 읽게 되면 영어는 1바이트로 처리할 수 있어 제대로 처리되지만, 한글은 2바이트가 이상이기 때문에 (UTF-8 16 인코딩에 따라 다르긴 함) 텍스트가 깨진다. 똑같은 문장을 FileReader로 읽을 경우에는 문자 단위로 처리하기 때문에 텍스트가 깨지지 않는다. Pip..
[Java] 입출력 (I/O) 1
[Java] 입출력 (I/O) 1
2021.11.21컴퓨터에서 제일 기본적인 입력 장치는 키보드이고, 출력 장치는 모니터이고 키보드와 모니터를 Standard Input output으로 말한다. Java에서 출력을 처리할 때 System.out.println등등 비슷한 메서드를 사용하고 입력을 받을 때는 Scanner 클래스를 이용해 처리하는데 이런 방법 말고 입력과 출력의 소스를 다르게 했을 때는 어떻게 처리 할 수 있을까? 입력과 출력을 합쳐서 입출력 (Input / Output) 이라고 하고 두 대상 간의 데이터를 주고 받는 걸 의미한다. 입력을 받을 때 쓰이는 통로와 출력을 처리할 때 쓰이는 통로는 각각 따로 정의돼야 하고, 이 통로를 Stream 이라고 한다. (입력스트림 / 출력스트림) 스트림은 바이트 단위로 데이터를 전송하고 입출력의 대상에 ..
[Java] 쓰레드 (Thread) 2
[Java] 쓰레드 (Thread) 2
2021.11.12함수를 쓰게 되면 운영체제가 자신의 시스템에 맞게 조절을 하게 되어, 프로그래머가 컨트롤 할 수 있는 부분이 그렇게 크지는 않다. 하지만, 이런 제한된 컨트롤 가능 범위 내에서 쓰레드의 실행을 어떻게 제어할 것인지를 알아보자. 쓰레드의 실행을 제어하기 위해 사용하는 메서드들을 살펴보자. 이 메서드들 중에서 stop suspend resume 메서드는 호환성을 위해서 정의돼있긴 하지만, 쓰레드의 비정상적인 종료에 큰 영향을 미치는 메서드들이기 때문에 자바에서 사용을 권장하지 않는다. 이 메서드들을 하나하나 살펴보기 전에 쓰레드의 상태에 대해 알고있어야 한다. 쓰레드에는 여러 가지 상태가 있는데, 쓰레드의 여러 가지 메서드들을 통해 어떤 상태를 다른 상태로 바꿔 줄 수도 있다. 일단 start() 메서드를 ..
[Java] 쓰레드 (Thread) 1
[Java] 쓰레드 (Thread) 1
2021.11.08시스템프로그래밍(시스템 자원을 쓰는것) / 운영체제(Operating System)에서 자세하게 다루는 부분이다. 어떻게 활용하는지에 초점을 맞춰 공부해보자. 프로세스 : 프로그램의 단위 하나의 프로그램이 실행될 때 하나의 프로세스에 할당돼 실행된다. PID(Process ID) 인터넷 익스플로어, 크롬.. 등등 여러 가지 프로그램들이 하나의 프로세스로써 돌아간다. 아니 그러면 한 번에 하나의 프로그램만 쓸 수 있나?? 라고 생각할 수 있다. 과거 DOS라는 운영체제는 멀티태스킹을 지원하지 않아 실제로 한 번에 두 가지 이상의 프로그램을 사용할 수 없었다. 하지만, 운영체제가 Windows 로 넘어가면서 멀티태스킹을 지원해 여러 가지 프로그램들을 한 번에 띄울 수 있게 됐다. 쓰레드는 프로세스를 가볍게 ..
[Java] 래퍼 클래스 (Wrapper)
[Java] 래퍼 클래스 (Wrapper)
2021.10.29객체지향 언어인 자바에서도 모든 것을 객체로 다루진 않고, 8개의 기본형 타입이 있다. 하지만, 때로는 기본형 변수도 객체로 다뤄야 할 때가 있다. 지네릭스 타입을 설정할때.. 매개변수로 객체를 요구할때.... 등등 많은 경우가 있다. 이를 처리해 주는 래퍼 클래스에 대해 간단히 알아보자. 8개의 기본형을 대표하는 8개의 래퍼클래스로 기본형 값을 객체로 다룰 수 있다. char -> Character / int -> Integer 말고는 앞글자를 대문자로 바꾼 형태이다. 문자열을 숫자로 변환할 때 많이 쓰던 Integer.parseInt() 메서드도 래퍼클래스의 메서드이다. 원래는 Integer.parseInt() 메서드는 int로 변환하고, Integer.valueOf() 메서드는 Integer 타입을..
[Java] 예외처리
[Java] 예외처리
2021.10.29런타임 시 발생하는 오류를 처리해 주자. 어떻게 사용하는지에 집중해 알아보자. try { }catch (Exception e) { } 위와 같은 형식으로 작성된다. 예외가 발생하면 발생한 예외와 일치하는 catch블럭을 확인하고, catch 블럭 내의 문장을 수행한다. 그 다음 전체 try-catch 문을 빠져나가서 다음 코드를 계속해서 수행한다. 예외가 발생하지 않으면 catch 블럭을 무시하고 전체 try-catch 문을 빠져나가서 다음 코드를 계속해서 수행한다. throw로 고의로 예외를 발생시킬 수 있다. Exception은 모든 예외들의 최고 조상이며, 모든 종류의 예외를 처리할 때는 Exception을 선언해 편하게 처리할 수 있다. Exception e = new Exception("고의로발..
[Java] 객체지향 요약
[Java] 객체지향 요약
2021.10.29코드의 재사용성 / 유지보수 / 중복된 코드의 제거에 집중해 객체지향 개념을 공부하자. 클래스 : 객체를 정의해 놓은 것. 객체를 생성하는데 사용된다. (클래스와 객체는 다르다.) 여기서 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다. (객체는 인스턴스라고도 불린다.) 객체를 생성하기 위해서는 클래스를 먼저 정의해야 한다. Java에서도 프로그래밍을 휘애 유용한 클래스들을 많이 제공한다. 입력받을 때 사용하는 Scanner, 문자열을 정의할 때 사용하는 String 등.. 여러 가지 클래스들이 있다. Scanner sc = new Scanner(System.in); 위의 코드를 읽어보면, Scanner 클래스 타입의 참조변수 sc를 선언 후 new 연산자를 통해 Scanner 인스턴스(객체..
[Java] 스트림 (Stream)
[Java] 스트림 (Stream)
2021.10.25많은 수의 데이터를 다룰 때, 컬렉션이나 배열을 활용했다. 물론 이렇게 데이터를 다루는 방법도 매우 효과적이지만, 이런 방식으로 작성된 코드는 가독성이 좋지 않고, 재사용성이 떨어지는 등 여러 가지 단점이 있다. 이런 단점들을 극복하기 위해 스트림이 만들어졌다. 스트림은 데이터 소스를 추상화하고 데이터를 다룰 때 자주 사용되는 메서드들을 정의해 뒀다. 바로 코드를 통해 알아보자. String 배열을 생성하고, 그 배열을 소스로 스트림을 생성한다. (배열 말고도 LinkedList, ArrayList 등 여러 가지가 소스가 될 수 있다) 이 다음 스트림의 여러 가지 메서드들을 읽어보자. String은 Comparable이 정의돼있기 때문에(순서가 정의돼있기 때문에) sort 메서드로 정렬이 가능하다. 위의..
[Java] 람다식 (Lambda expression)
[Java] 람다식 (Lambda expression)
2021.10.25모든 걸 객체로 생각하는 객체지향언어인 자바가 JDK1.8부터 람다식을 추가함으로써 자바는 객체지향언어인 동시에 함수형 언어가 됐다. 람다식을 어떻게 사용하는지에 초점을 맞춰 공부해보자. 함수(자바에서는 메서드)를 다룰 때 세 가지 특징이 있다. 1. 함수 자체를 변수로 저장할 수 있다. 2. 함수를 다른 함수의 매개변수로 쓸 수 있다. 3. 함수 자체를 반환할 수 있다. 위의 세 가지 특징을 만족하는 함수를 일급함수라고 한다. 함수형 언어는 일급함수를 지원하고, 지원하기 위한 다양한 특징이 있다. 자바도 일급함수를 지원하고 싶었고, 이 생각에 기반해 람다식이 등장했다. 함수 자체를 변수로 저장해야 하는데, 함수 자체에도 이름이 있다. 그렇기에 변수의 이름과 함수의 이름이 충돌이 있을 수 있다. 이를 해..
[Java] 컬렉션 프레임웍 (Collections Framework)
[Java] 컬렉션 프레임웍 (Collections Framework)
2021.10.19Collection : 데이터 그룹 Framework : 표준화된 프로그래밍 방식 다양한 데이터 타입들을 하나의 그룹으로 모아 처리할 수 있게 해 준다. List Set Map 이 세 가지가 컬렉션 프레임웍의 핵심 인터페이스이다. List와 Set를 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어 공통부분을 Collection 인터페이스로 정의하고 List와 Set는 Collection 인터페이스를 상속받도록 설계했다. 그러니까 정리하면 Collection이 맨 위에 있고 그 밑에 List와 Set, 그리고 List와 Set를 상속받는 친구들이 밑에 있는 형식이다. List로 구현한 ArrayList와 LinkedList, Stack같은 친구들은 Collection과 List의 메서드는 물론 자신의 ..
[Java] 열거형 (enums)
[Java] 열거형 (enums)
2021.10.18순서가 있는 자료들을 나열할 때 사용한다. 여러 상수(final)들을 정의할 때 유용하게 사용된다. 자바의 열거형은 값과 타입을 모두 체크해 타입에 안전한 열거형이라고 한다. 열거형은 다음과 같은 형식으로 정의할 수 있고, 꼭대기의 클래스 / 인터페이스 / static 에만 정의될 수 있다. (메서드에서는 정의될 수 없다.) 열거형 상수간에는 "==" 로 비교할 수 있다. String을 비교할 때는 원래 equals()메서드를 통해 비교했는데, 열거형은 둘 다 가능하다. (그만큼 성능이 좋고, 빠르다.) 다만, 같은 비교 연산자는 사용할 수 없는데, 대신 compareTo()메서드를 이용해 열거형 상수들을 비교할 수 있다. 다음 코드를 작성했을 때 a b c d abcd 에는 각각 0 1 2 ..