Java 81

[Java]입력과 출력(Input and Output) - part.1 Basic

▲ 일반적으로 우리가 컴퓨터에 어떠한 데이터값을 넣을 때는 키보드를 통해서 입력한다. 또한 일반적으로 우리는 모니터를 통해서 다양한 데이터들을 접한다. 때문에 표준이 되는 입력장치는 키보드라 할 수 있고, 표준이 되는 출력장치는 모니터라 할 수 있다. 노드(node)란 입력하는 쪽, 입력받은 것을 돌리는 프로그램쪽 그리고 출력하는 쪽에 서로 연결할 수 있는 부분들을 가리킨다. ▲노드에 연결된 스트림을 노드스트림이라하며 데이터 소스나 목적지에 직접 연결할 수 있는 스트림이다. 입력장치에 연결된 노드스트림인 입력스트림이라하고 출력장치에 연결된 노드스트림은 출력스트림이라 한다. 이제 각각 다른 입력장치에서 입력받아서 출력장치로 출력해보자 1. 키보드에서 입력 받아서 파일과 모니터로 출력 ▲ System.in은..

Java 2022.03.23

[Java]Thread

Thread란? 하나의 프로세스 안에서 실행되는 명령 흐름 즉, 프로세스 안의 작은 프로그램이다. 자바는 멀티스레딩을 지원하는데 이를 지원하기 위해 Thread클래스와 Runnable인터페이스를 제공한다. 멀티스레딩이란 하나의 프로세스 안에서 여러 개의 스레드가 동시 작업하는 것을 말한다. 즉 한 프로그램 내에서 두 가지이상의 일을 수행하는 것이다. main메소드를 가진 자바 프로그램은 하나의 스레드를 가진(main스레드)단일 스레드라고 볼 수 있다. Thread클래스나 runnable인터페이스르 상속받아 다른 스레드를 동작시킬 수 있다. ▲ 먼저 스레드로 구현하지 않은 클래스를 만들어보자 ▲ 그리고 스레드로 구현하지 않고 for문으로 메소드를 하나 만들어보자 ▲ 그리고 메인에서 실행해보자 ▲ 결과는 위..

Java 2022.03.22

[Java]익명 클래스(Anonymous Class)

익명클래스(Anonymous Class)란? 이름이 없는 클래스 GUI프로그래밍 시 주로 사용(이벤트 처리하기 위해서) 부모 클래스의 메소드를 오버라이딩하는 것이 주된 용도이다. 메소드 안에 정의된 클래스 이름이 없어서 부모클래스의 생성자를 빌려서 인스턴스화 한다. 익명클래스의 형식은 다음과 같다 ▲익명, 말그대로 이름이 없어서 부모클래스의 이름을 빌려서 사용한다. 예제를 보면서 이해해보자. ▲먼저 부모가 될 Person클래스를 만들고 맴버변수와 인자생성자 그리고 출력의 편의를 위해 toString까지 오버라이딩 해주었다. ▲이번에는 자식이 될 클래스를 만들고 Person클래스를 상속시켰다. 부모클래스인 Person에 없었던 맴버변수와 메소드를 만들고 인자생성자와 부모의 메소드를 오버라이딩 했다 ▲추가로..

Java 2022.03.22

[Java]Builder pattern

Builder pattern은 객체 생성과 관련된 디자인 패턴이다. 보통 인자가 많은 객체를 생성할 때 유리하다. ▲ 내부클래스를 품을 외부클래스를 생성하자 ▲ 내부 정적 클래스를 생성하자. 내부 클래스의 맴버변수는 외부클래스의 맴버변수와 동일해야한다. ▲내부클래스에는 꼭 초기화를 하고싶은 필수항목만을 받는 인자생성자를 생성하였고, 선택적으로 초기화를 할 맴버변수를 인자로 받는 인자생성자도 만들었다. 이때 인자생성자들의 반환타입은 모두 내부클래스 타입으로 한다. 추가로 외부클래스 타입을 반환하는 메소드와 내부 정적 클래스타입을 인자로 받는 생성자도 정의했다. ▲ 편한 출력을 위해 toString도 오버라이딩 하자. 출력을 해보자 ▲외부클래스를 선언 및 인스턴스화 해주면서 Builder인자생성자를 통해 필..

Java 2022.03.22

[Java]내부클래스 - part.1 내부 맴버 클래스

내부 클래스란? 클래스안에 또 다른 클래스를 만드는 것을 말한다. 일반적으로 클래스 앞에는 static을 붙일 수 없지만 내부클래스 앞에는 static을 붙일 수 있다. 클래스안의 클래스를 내부클래스 혹은 Inner Class 혹은 중첩클래스 혹은 Nested Class라고 한다. 내부클래스는 외부클래스의 맴버(변수,메소드 등)를 자신의 것처럼 자유롭게 사용가능하다. 단, 내부 정적클래스는 외부의 non-static맴버를 사용할 수 없다. 내부정적클래스만을 제외하고 모든 내부클래스가 정적맴버를 가질 수 없다. 내부 클래스의 종류 클래스 안에 정의된 클래스 내부 맴버 클래스(not-static) 내부 정적 클래스(static) 메소드 안에 정의된 클래스 내부 로컬 클래스(이름이 있는 클래스) 내부 무명 클..

Java 2022.03.22

[Java]예외처리 - part4. finally

finally절 : 예외가 발생하든 안하든 반드시 실행하고자 하는 명령문들을 실행시킨다. finally는 try~catch절과 함께 사용할 수 있다. ▲ try~catch~finally를 사용하면 try절 실행 후 finally절이 실행되던지, catch절이 실행되고 finally절이 실행된다. try~fianlly에서는 예외는 던지고 예외가 발생유무에 상관없이 finally절이 실행된다. 단, finally절 이전에 System.exit(0)이 있다면 프로그램이 종료되는 것이므로 finally절은 실행이 안된다. ▲try나 catch, finally는 단독으로 사용할 수 없다. 런타임예외(Unchecked error)는 반드시 마지막에서라도 try~catch절로 직접 처리해야한다. 컴파일예외(Check..

Java 2022.03.22

[Java]예외처리 - part3. throws

예외객체 생성 후 throw키워드를 이용해서 직접던지기 throw는 반환타입 메소드명 throws 예외클래스와 쌍이다 throws를 이용해서 던진 예외는 언젠가는 반드시 try~catch를 해야한다. throw이후의 명령문은 실행되지 않는다. 즉, 만약에 계속 던졌다면 최종 main에서는 다시 던질 수는 있지만 실행시 에러 고로 try~catch를 해야한다. ▲ throw를 사용하지 않고 throws 즉 던지는 방식으로 예외처리를 했다. ▲throws와 함께 throw를 사용하였다. throw가 실행되면 "짝수는 안되요"가 출력되고 메소드가 종료되기 때문에 throw밑에있는 코드는 실행될 수 없는 코드 즉, Unreachable code가 된다. ▲ CallByJava는 throw를 사용하지 않았기 때문..

Java 2022.03.21

[Java]예외처리 - part2. Catch절

Catch절의 특징 하나의 try에 catch절을 여러개 사용할 수도 있다. 여러개 사용시 자식 예외클래스부터 catch해야한다. 부모 예외 클래스를 자식 예외 클래스보다 상위에 위치시켜놓으면 부모가 예외를 모두 잡아버리기 때문에 자식예외클래스의 catch block이 되어 컴파일이 안된다. ▲ 위 코드에서는 다양한 에러가 발생할 수 있다. sc.nextLine()에서는 숫자형식이 아닌 문자열이 입력될 때는 NumberFormatException이, sc.nextInt()에 숫자가 아닌 것이 입력될 때는 InputMismatchException이, 마지막행에서 두 숫자 나누기 시 arr[1]이 0이라면 ArithmeticException이 발생할 수 있다. 다양한 예외에러가 생길 수 있기 때문에 이를 모..

Java 2022.03.21

[Java]예외처리 - part1. Basic

컴파일 에러(Checked Exception) Complie시 발생하는 에러 Syntax(문법)오류, IOException(예외 클래스), SQLException(예외클래스)등 Complie이 안되면 실행이 안된다. 컴파일 에러(외부 자원 사용시 발생하는 컴파일에러:IOException, SQLException)는 던지거나(throws) 직접처리(try~catch) 할 수 있다. 단 Syntax오류는 직접 수정해야 한다. 방법1) throws로 main method로 던지기 ▲ throws한다는 것은 해당위치에서의 예외처리를 다른쪽으로 미뤄버린다는 것이다. 방법2) try~catch로 직접 예외처리 하기 ▲try~catch는 예외처리를 남에게 미루지 않고 자신이 직접 처리하는 것이다. 런타임 에러(UnC..

Java 2022.03.21