Language/Java

매개변수 다형성에 대해서 까먹어 정리해 보려고 한다. 본 포스팅은 JAVA의 정석 3판 - 저. 남궁 성 교재 ch7 - 5.5 매개변수의 다형성을 참고하였습니다. 참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다. 아래와 같이 클래스가 정의되어 있다고 가정하자. class Product{ int price; int bonusPoint; } class Tv extends Product{} class Computer extends Product{} class Audio extends Product{} class Buyer { int money = 1000; int bonusPoint = 0; } Product클래스는 Tv, Audio, Computer클래스의 조상이며, Buyer클래스는 제품(pro..
제네릭을 왜 쓰는가? 바나나와 책을 저장하는 객체가 있다고 생각해보자 // Banana클래스와 Banana클래스를 담을 수 있는 Good1클래스 class Banana{} class Goods1{ private Banana banana = new Banana(); public Banana getBanana(){ return banana; } public void setBanana(Banana banana){ this.banana = banana; } } // Book클래스와 Book클래스를 담을 수 있는 Good2클래스 class Book{} class Goods2{ private Book book = new Book(); public Book getBook(){ return book; } public ..
쓰레드는 객체가 생성, 실행, 종료되기까지 다양한 상태를 가진다. 각 쓰레드는 Thread.State 상태로 정의되었다. Thread의 인스턴스 메서드인 getState()로 쓰레드의 상태값을 가져올 수 있다. Thread.State getState() Thread.State의 내부에는 6개의 문자열 상수(NEW, RUNNABLE, TERMINATED, TIMED_WAITING, BLOCKED, WAITING)가 저장되어 있다. NEW new 키워드로 쓰레드의 객체가 생성된 상태(start()전) RUNNABLE start() 이후 CPU를 사용할 수 있는 상태 다른 쓰레드들과 동시성에 따라 실행과 실행 대기를 교차함 TERMINATED run()메서드의 작업 내용이 모두 완료돼 쓰레드가 종료된 상태 (..
동기화: 하나의 작업이 완료된 후 다른 작업을 수행하는 것 비동기: 하나의 작업 명령 이후 완료 여부와 관계없이 바로 다른 작업 명령을 수행하는 것. 동기화의 필요성 멀티쓰레드를 사용할 때 동기화는 필요하다. 이유를 알아보자. 왼쪽의 step3도중 오른쪽 step1이 먼저 발생하면 결과는 5가 아닌 4가 나올 것이다. 동기화를 사용하지 않았을 때 문제가 발생된다. class MyData{ int data = 3; public void plusData(){ int mydata = data; try{Thread.sleep(2000);} catch (InterruptedException e){} data = mydata + 1; } } class PlusThread extends Thread{ MyData m..
쓰레드의 속성 종류 현재 쓰레드 객체 참조 값 얻어오기 객체를 참조할 수 없을 때 Thread클래스이 정적 메서드인 currentThread()메서드를 이용해 현재 쓰레드 객체의 참조값을 얻어올 수 있다. static Thread Thread.currentThread() 실행중인 쓰레드의 개수 가져오기 현재 실행중인 쓰레드 개수를 알고 싶을 때 사용 static int Thread.activeCount() 쓰레드의 이름 지정 및 가져오기 쓰레드에 이름을 지정. String setName(String name) 직접 지정하거나 자동으로 부여된 쓰레드의 이름을 가져올 때 사용 String getName() 쓰레드 객체의 속성 다루기 예제 public class ThreadPropertiesTest1 { pu..
자바 프로그램에서의 쓰레드 자바로 작성한 프로그램을 실행하면 메모리로 로딩돼 프로세스 상태가 된다. .class 파일을 실행하면 자바 가상 머신은 main 쓰레드를 생성한다. 즉, 프로그램이 처음 실행되면 시작 지점에서 main쓰레드 1개만이 존재한다. main()메서드에서 작성한 내용이 바로 이 main쓰레드에서 동작한다. mian쓰레드의 내부에서 2개 이상의 쓰레드를 생성해 실행하면 동시에 N개 이상의 쓰레드가 동작하게 되는데, 이를 멀티 쓰레드라고 한다. 멀티 쓰레드의 필요성 만약 FPS게임을 하고 있다고 가정하자 총을 연발로 5발을 쐈을 때 쏘는 화면과 발사 소리를 출력한 것을 나타낸 것이다. public class TheNeedForThread { public static void main(St..
throws 예외를 처리하지 않고 예외처리의 의무를 호출한 메서드에게 전달한다. 예외를 다음과 같이 전달하면 된다. 예외 전가 구조 리턴 타입 메서드명(입력매개변수) throws 예외 크래스명 { // 예외 발생 코드 } a()메서드에서 b()메서드를 호출하고, b()메서드 내부에 예외가 발생할 수 있는 코드가 포함돼 있을 때를 살펴보자 void a(){ b(); // 1.호출 } // 2. 예외 처리 void b(){ try{ //예외 가능 블록 } catch (예외 클래스 타입 참조 변수) { //예외 처리 } } b()메서드가 스스로 예외를 처리했을 때 b() 메서드가 직접 예외 처리를 했다. 이때 a()메서드가 b()를 호출하여 사용하는데 문제가 없다. void a(){ try{ b(); // 1..
리소스 자동 해제 예외 처리 finally{} 블록은 '항상 실행해야 하는 기능이 있을 때 사용하는 블록' 이다 finally{} 블록의 가장 대표적인 기능은 리소스를 해제하는 것이다. (자원반납) 예를들어 수정하기 위해 열어둔 파일이 있다면 이 파일을 닫아야 다른 프로그램이 이 파일을 사용할 수 있다. 메모리에 엄청난 크기의 객체를 만들어 놓고 사용했을 때도 사용이 완료되면 메모리 공간을 확보하기 위해 리소스를 해제해야 한다. 자바에서 리소스해제가 꼭 필요한 대표적인 예로 자바 입출력 리소스를 들 수 있다. 다음 예제를 살펴보자 InputStreamReader is = null; try { is = new InputStreamReader(System.in); System.out.println(is.re..
예외와 에러의 차이점 예외: 개발자가 처리할 수 있는 오류 에러: 개발자가 처리할 수 없는 오류 자바에서 예외의 최상위 클래스는 Excetpion클래스, 에러의 최상위 클래스는 Error클래스다. 이 2개의 클래스는 모두 Throwable클래스를 상속하고 있다. 따라서 에러와 예외 모두 Throwable클래스의 모든 기능을 포함한다. 예외 클래스의 상속 구조 Throwable클래스를 상속받은 Exception클래스는 다시 일반 예외 클래스(Checked Exception)와 실행 예외 클래스(Unchecked(runtime) exception)로 나뉜다. Exception 클래스에게서 직접 상속 받은 예외 클래스들이 처리하는 일반 예외는 컴파일 전에 예외 발생 문법을 검사하며, 예외 처리를 하지 않으면 ..
이너 인터페이스 이너 클래스와 마찬가지로 인터페이스를 클래스 내부에 정의하는 것은 해당 클래스에 의존적인 기능을 수행할 때다. 이너 인터페이스는 사용자 인터페이스의 이벤트 처리에 가장 많이 사용된다. 이너 인터페이스의 정의와 특징 이너 인터페이스의 특징 중 하나는 정적 이너 인터페이스만 존재할 수 있다는 것이다. 만약 이너 인터페이스 앞에 static 제어자를 생략하면 컴파일러가 자동으로 추가해 준다. class A{ static interface B{ void bcd(); } } 이너 인터페이스도 인터페이스므로 자체적으로 객체를 생성할 수 없다. 객체를 생성하기 위해서는 해당 인터페이스를 상속한 자식 클래스를 생성한 후 생성자를 이용해 객체를 생성하거나 익명 이너 클래스를 활용해 객체를 생성해야 한다...
White Asher
'Language/Java' 카테고리의 글 목록