목록Java (53)
오답노트
Thread 프로그램이 실행되면 OS로 부터 메모리를 할당받아 프로세스 상태가 된다. thread 하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread이다. Multi - Thread 쓰레드가 동시에 수행되는 프로그래밍이다. 이는 여러 작업이 동시에 실행되는 효과가 있다. 하지만 쓰레드가 모두 공유하는 데이터에 대해서 동기화를 구현하지 않으면 오류가 발생할 수 있다. Thread 객체 상속 class MyThread extends Thread{ public void run() { int i; for(i = 1; i < 201 ; i++) { System.out.print(i+"\t"); } } } public class ThreadTest { public s..
Decorator Pattern 자바의 입출력 스트림은 모두 데코레이터 패턴으로 만들어졌다. 상속보다 유연한 구현방식을 가지고 있다. 1. abstract 객체를 상속 받는 자식 객체 2. 1번의 abstract 객체를 상속 받는 abstract 자식 객체
직렬화 인스턴스의 상태를 그대로 파일 저장하거나 네트웍으로 전송하고 이를 다시 복원하는 방식이다. 자바에서는 보조 스트림을 활용하여 직렬화를 제공한다. 스트림을 활용한 직렬화 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Person implements Serializable{ String name; transient String job; // 직렬화 안됨 public Person() {} public ..
입력 스트림과 출력 스트림 입력 스트림 : 대상으로부터 자료를 읽어 들이는 스트림 (ex. FileInputStream, FileReader, BufferedInputStream, BufferedReader) 출력 스트림 : 대상으로 자료를 출력하는 스트림 (ex. FileOutputStream, FileWriter, BufferedOutputStream, BufferedWriter) import java.io.IOException; import java.io.InputStreamReader; public class SystemInTest { public static void main(String[] args) { // TODO Auto-generated method stub System.out.prin..
사용자 정의 예외 처리 Exception 클래스에서 상속을 받아 throws로 받거나 catch의 인자로 사용할 수 있다. public class PassWordTest { private String password; public String getPassword() { return password; } public void setPassword(String password) throws PassWordException { if(password == null) { throw new PassWordException("비밀번호는 null일 수 없습니다."); } else if(password.length() < 5) { throw new PassWordException("비밀번호는 5자 이상이어야합니다.")..
예외 처리 예외 처리를 통해 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록한다. 그리고 log를 남겨 추후 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요하다. try - catch - finally import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FileExceptionHandling { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("a.txt"); System.out.println("re..
스트림 자료의 대상과 관계없이 동일한 연산을 수행하고, 배열, 컬렉션을 대상으로 연산을 수행한다. 단, 한번 생성하고 사용한 스트림은 재사용 할 수 없다. 중간 연산 : 중간 연산은 여러 개의 연산이 적용될 수 있다. 하지만 그 결과는 최종 연산이 호출 후에 적용된다. 이를 지연 연산이라고 한다. (ex. filter, map,sorted 등) 최종 연산 : 마지막 한 번만 적용된다. (ex. sum, count, forEach) import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; public class ArrayListStreamTest { public static void main(String[] args..
함수형 프로그래밍 함수형 프로그래밍은 순수함수를 구현하고 호출함으로써 외부 자료에 부수적인 영향을 끼치지 않도록 구현하는 방식이다. 즉, 함수 내부에서 함수 외부에 있는 변수를 사용하지 않아 함수가 수행되더라도 외부에는 영향을 주지 않는다. 외부 자료를 사용하지 않기 때문에 병렬처리가 가능하다. 함수형 프로그래밍은 함수의 기능이 자료에 독립적임을 보장한다. 이를 동일한 자료에 대해 동일한 결과를 보장하고, 다양한 자료에 대해 같은 기능을 수행할 수 있다. 람다식 표현 public interface Add { public int add(int x, int y); } // Add.Java public interface Print { public void print(String str); } // Print...
지역 내부 클래스 말 그래도 클래스 안에 있는 클래스를 의미한다. 주의 해야할 점은 지역 내부 클래스는 스택 메모리에 잡히게 된다. 이때 지역 내부 클래스가 쓰레드 같은 경우에 지역 내부 클래스의 멤버 변수를 변경하려고 하면 에러가 발생한다. 그 이유는 스택 메모리에 생성된 변수가 사라지기 때문이다. 그래서 메서드 호출 이후에도 사용해야하는 경우가 있을 수 있으므로 지역 내부 클래스에서 사용하는 매서드의 지역 변수나 매개 변수는 final로 선언된다. class Outer2{ int outNum = 100; static int sNum = 200; Runnable getRunnalbe(int i) { int Num = 10; class myRunnalbe implements Runnable { int l..
추상화 정의되지 않은 함수나 클래스를 의미한다. 추상화 클래스는 자식 클래스가 상속 받아 사용할 수 있다. 추상 클래스 선언 public abstract class Car { public abstract void drive(); public abstract void stop(); public void startCar() { System.out.println("시동을 켭니다"); } public void turnOff() { System.out.println("시동을 끕니다"); } final public void run() { startCar(); drive(); stop(); turnOff(); } } 추상 클래스 상속 public class AICar extends Car{ @Override publ..