대학
-
java 네트워크 프로그래밍대학/객체지향프로그래밍 2022. 12. 10. 19:32
- 네트워크 기초 소켓: 프로세스 간 통신 채널의 엔드 포인트 포트: 호스트 내부에서 소켓을 구분할 때 사용 (0~65535) ( 21: FTP / 23: Telnet / 43: whois / 80: HTTP / 443: HTTPS ) 프로토콜: 통신간 데이터 전송 규약 IP: 네트워크 계층 프로토콜 ( IPv4(1*4바이트) / IPv6(2*8바이트) ) 도메인: 호스트를 식별하는 이름으로 IP주소 대신 사용. 단, DNS 서버에 도메인이름-IP주소가 저장되어야 한다. TCP: 연결 지향 전송 계층 프로토콜 (Handshake가 있고, 데이터 송수신 체크를 하기 때문에 신뢰성이 높다) UDP: 비 연결 지향 전송 계층 프로토콜 (Handshake가 없고, 데이터 송수신 체크를 안 하기 때문에 속도가 빠..
-
java lambda expression / 메서드 참조대학/객체지향프로그래밍 2022. 12. 10. 15:36
- lambda java를 함수형 언어처럼 사용할 수 있게 하는 문법 (n) -> (n%2) == 0; 메서드와 달리 이름이 없기에 익명 함수라고도 불리고, 메서드와 달리 특정 클래스에 종속되지 않는다. 예외처리도 가능하며 변수에 대입될 수도, 메서드의 인자로 전달될 수도 있다. interface NumericFunc { int func(int n); } class BlockLambdaDemo { public static void main(String[] args) { NumericFunc factorial = (n) -> { int result = 1; for (int i = 1; i 다음에 오는 값을 리턴하는데, 중괄호가 오게되면 리턴하지 않고, 중괄호 안의 코드를 실행한다. - functional ..
-
java generic(2)대학/객체지향프로그래밍 2022. 12. 10. 01:15
- Generic Method 지금까지는 클래스에서 제네릭의 사용법을 살펴봤는데, 메서드에서도 제네릭을 사용할 수 있다. 일반 클래스 내부에서도 메서드의 매개변수나 리턴 값을 제네릭 매개변수로 정의할 수 있다. class GenMethDemo { // Comparable는 java.lang에서 선언된 클래스로 T를 비교 가능한 상태로 만들어준다. // V타입 배열 안에 T타입 변수를 넣기 위해 V extends T. static boolean isIn(T x, V[] y) { for(int i=0; i < y.length; i++) if(x.equals(y[i])) return true; return false; } public static void main(String[] args) { // Use i..
-
java generic(1)대학/객체지향프로그래밍 2022. 12. 9. 23:03
하나의 코드를 다양한 타입의 객체에 재사용하는 객체 지향 기법으로 타입을 변수로 사용한다. (c++의 template와 유사) 단, 기초타입을 변수로 사용할 수 없다. 제네릭은 컴파일할 때 타입을 점검하기 때문에, type safety를 보장하여 실행 도중 발생할 오류를 방지한다. 또한 불필요한 타입 변환이 없기 때문에, 프로그램 성능에 도움을 준다. (타입 매개변수를 타입 인자로 대체할 뿐) class Gen { T ob; Gen(T o) { ob = o; } T getOb() { return ob; } void showType() { System.out.println("Type of T is " + ob.getClass().getName()); } } class GenDemo { public stat..
-
java transient / volatile / instanceof / native / assert대학/객체지향프로그래밍 2022. 12. 9. 22:12
- transient 자원에 대한 특별한 키워드로 오브젝트를 디스크에 저장, 또는 객체를 바이트 스트림으로 변환(직렬화)해 네트워크로 전송시 특정 변수를 제외한다. class T { transient int a; int b; } 이 코드의 경우 a가 있다는 것은 알려줄 수 있지만, a에 어떤 값이 저장되었는지는 알려주지 않는다. - volatile 지정된 변수가 스레드에 의해 변경될 수 있음을 표시한다. public class SharedObject { public int counter = 0; } 기본적으로 메모리의 counter을 cpu cache에 복사한 후 스레드는 이 cpu cache에 접근한다. 따라서 두 개의 스레드는 각각 counter 복사본에 접근하기 때문에 실제 메모리에 값을 쓸 때 충..
-
java I/O대학/객체지향프로그래밍 2022. 12. 9. 21:46
java는 입출력을 stream을 통해 처리한다. (FIFO 구조) 단, 한 번에 열 수 있는 스트림 개수가 정해저 있고, 동일한 파일은 둘 이상의 스트림으로 열 수 없다. 스트림을 데이터를 읽는 형식에 따라 아래의 두 종류로 나뉜다. 1. 바이트 스트림: 입출력을 바이너리 데이터로 다룬다. 2. 문자 스트림: 입출력을 문자 단위로 다룬다. 스트림은 보통 버퍼(메모리)와 함께 쓰이는데, 중간에 버퍼를 두는 이유는 스트림과 프로그램 간에 데이터를 효율적으로 전송하기 위함이다. (특히, 입출력 장치와 프로그램 사이 동작 속도가 크게 차이날수록 버퍼를 사용하는게 효율적이다) import java.io.*; class BRReadLines { public static void main(String[] args)..
-
java 열거형 / 박싱 / 어노테이션대학/객체지향프로그래밍 2022. 12. 9. 21:16
- 열거형 (enumeration) 이름을 가진 상수들의 리스트 enum Apple { Jonathan, GoldenDel, RedDel, Winesap, Cortland } 열거형: Apple 열거형 상수: Jonathan, GoldenDel ... Apple ap; switch(ap) { case Jonathan: ... case Winssap: ... } 열거형은 class타입으로 간주되지만, 객체를 생성하지는 않는다. (new 키워드 미사용) for (Apple i : Apple.values()) { System.out.println(i); } System.out.println("RedDel value: " + Apple.valueOf("RedDel")); // Jonathan // GoldenD..