본문 바로가기

Archived(CSE Programming)/Java

(16)
Java_Stream # Stream 데이터 통로 파일 입출력 네트워크 소켓(서버통신) xxxStream xxxReader(Writer) Source to Destination 콘솔 입출력, 파일 입출력 외에도 객체를 주고 받을 수 있는 Stream 존재 ObjectInput(Output)Stream -> Serializable 직렬화 객체는 Object IO을 통해 직렬화 가능 직렬화의 장점 중 하나는 그대로 역직렬화를 통해 메모리상의 로드가 가능하다는 것(편하다) 단, 속도는 단점 import java.io.File; import com.sinc.intern.stream.FileObj; public class StreamMain { public static void main(String[] args) { String wr..
Java_Thread 스레드는 작업의 단위, 프로세스 내에서 기생하는 프로세스 자바는 객체지향이다 플랫폼 독립적이고 JVM에 의존적이다 스레드 언어로서 멀티스레드 지향 언어(프로세스 기반과 대비) > 이러한 특징으로부터 웹 중심으로 자바 성장(스레드 풀) 기존의 웹에서 프로세스 중심으로 처리하면 서버에서 객체 1000개 생성 등 소모 지나침 우리는 스레드에 대한 이해는 필요하다(직접적으로 프로그래밍할 일 많지 않음) Java는 두 가지 방법을 통해 스레드 생성 가능(Thread Class 상속, Runnable 인터페이스) Thread를 상속하는 것 보다는 Runnable이 자주 쓰임(단일 상속이기에 중요한 다른 class 상속하기 위해) cf. callback 함수: 호출을 명시하지 않는 함수 package com.sinc..
Java_예외처리 # 예외처리 Soft한 에러 -> Exception 예외를 만났을 때, 처리를 하는 방법에 대해서만 이해하기 미리 다 예측해서 대응하기는 불가능하다 Object -> Throwable -> Exception, Error Excetion 클래스는 다시 구분 Compile Exception / Runtime Exception 이러한 예외들을 대처하는 것이 예외처리 # TCF, TF Try: 예외발생 코드 Catch: 예외 발생 후에 해야하는 작업들 Finally: 반드시 실행되는 코드(Finally 내부에 Try~Catch 쓸 수 있음) (Try~Catch 외에 Try~Finally도 있음, Try~Finally는 throws 예외를 던질 때 사용) > 계속 던지더라도 Catch를 통해서 결국에는 처리를 해..
Java_다형성과 컬렉션 # 다형성 객체의 다형성 - 상속 타입에서 부모의 타입으로 자식의 인스턴스를 담을 수 있도록 하기 메소드의 다형성 - 상속 관계에서 오버로딩이 아닌, 오버라이딩을 메소드의 다형성으로 보기(재정의) 매개변수의 다형성 - 메소드 호출 시 매개변수 타입으로 부모 타입으로 지정해서 자식 타입으로 처리할 수 있도록 하기 # 추상화 추상화를 정리하기 위해서는 추상 클래스, 인터페이스에 대해서 이해하기 (차이점 - 추상클래스는 객체들의 공통점을 찾아 추상화시키는 것 / 인터페이스는 객체들의 공통 동작을 강제하는 것) abstract 통해 추상메소드 마킹 인터페이스는 약속이다 ex) 우리가 빔프로젝트한테 리모콘이라는 약속을 통해 동작을 강제할 수 있다 인터페이스는 상수와 추상메소드만 가질 수 있다(보통 상수는 잘 안씀..
Java_OOP와 다형성 # OOP 은닉화, 상속, 다형성, 추상화 cf) 개발방법론 : scrum, CBD, agile, waterfall, ... # 상속 - 어떤 Class 설계할 때 마다 A~Z 구현, But 상속이 있다면 손쉬운 확장 공통의 특징을 상위 class로 올리고 필요한 class에서 상속받기 (네트워크에서는 상속의 개념을 활용하지 않는다) 지역변수 / 전역변수 클래스 변수 / 멤버 변수 # 상속 - 객체의 다형성, 메서드의 다형성, 매개변수의 다형성 (byte, short, int, long / float, double / char / String / boolean) java 와 같은 컴파일 언어는 타입점검이 중요! (정수형 상수는 int, 실수형 상수는 double) ex) 12.235f int형은 char..
Java_자바의 기본 # Java(OOP) > 유지보수의 효율성 은닉화(Encapsulation) 객체의 탈 자체를 숨기고 다형성 구현 상속(Inheritance) 다형성(Polymorphism) 추상화(Abstraction # 업무 개발환경 세팅 -> JDK 1.6 ~ 1.7 JDK 내부의 JRE 라는 실행환경 존재 # OOP에 대하여 핵심은 클래스는 인스턴스가 아니다 클래스에 선언된 변수와 메서드는 인스턴스 소유이다 유저 인터페이스 / 비즈니스 로직, 데이터 처리부 등 개발은 class를 만드는 것이고 다음의 레이어들을 구분하여 설계 및 구현한다. 유저를 위한 프리젠테이션 레이어, 제어를 위한 컨트롤 레이어, 처리를 위한 비즈니스 레이어, 데이터 영속성을 관리할 수 있는 퍼시스턴스 레이어, 데이터를 표현하는 실질적인 비즈..
Java 깊은 복사와 얕은 복사 Java에서 객체를 복사하는 유형에는 깊은 복사와 얕은 복사 2가지가 있다. 깊은 복사의 경우 객체의 실체값을 복사하는 것이고, 얕은 복사는 객체의 참조값(주소값)을 복사하는 것이다. 그래서 얕은 복사는 객체 변수에 기존의 변수를 옮겨 담는 것이고 깊은 복사는 객체 Cloneable 인터페이스를 구현하여 Clone 메소드를 통해 객체의 실체를 반환한다. 이 때, 참조자료형의 경우에는 override한 clone 메소드내에서 따로 처리를 해줘야 한다. org.apache.http.client.utils의 CloneUtils 라이브러리를 활용한 Deep Copy // 복사가 될수있도록 설정 public class Family implements Cloneable{ String name; int age; bo..
Java 마커 인터페이스 Java의 마커 인터페이스는 다음과 같이 메소드와 상수를 포함하고 있지 않은 표시용 인터페이스를 뜻한다. public interface marker{ } 그럼, 이러한 마커 인터페이스는 왜 쓰는가? 정답은 간단하다. 해당 클래스 파일을 컴파일러와 JVM에게 특별한 방식으로 처리해야 함을 알릴 수 있다. 우리가 흔히 쓰는 Serializable, Cloneable과 같이 직렬화, 복제화를 함에 있어 특별한 방식으로 처리해야 함을 알린다. 참고로, 마커 어노테이션이라는 문법도 존재한다. @Retention(RetentionPolicy.RUNTIME) @interface Markable1{ } Class clazz = this.getClass(); if(clazz.isAnnotationPresent(Marka..