JAVA

    스레드 제어

    스레드 상태 스레드를 생성하고 시작하면 스레드는 다양한 상태를 가지게 된다. 스레드의 상태는 자동으로 변경될 수도 있고, 코드에 의해서 변경될 수도 있음. 실행 상태 : 실행 대기 상태에 있는 스레드 중에서 운영체제는 하나의 스레드를 선택하고 CPU가 run() 메소드를 실행하게함 종료 상태 : 실행 상태에서 run() 메소드가 종료되면, 더 이상 실행할 코드가 없기 때문에 스레드의 실행은 멈추게 됨 스레드 상태 제어 실행중인 스레드의 상태를 변경하는 것 일시 정지 실행 중인 스레드를 일정 시간 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep()을 사용 다음과 같이 Thread.sleepO 메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고, 다시 실행 대기 상태로 돌아간..

    멀티 스레드

    프로세스 운영체제에서는 실행 중인 하나의 애플리케이션 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것이 프로세스이다. 멀티프로세스 운영체제에서 할당받은 자신의 메모리를 가지고 실행하기 때문에 각 프로세스는 서로 독립적이다. 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다. 멀티 스레드 하나의 프로세스 내에 동시 실행을 하는 스레드들이 2개 이상인 경우 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있음 다른 스레드에 영향을 미침 메인 스레드 자바의 모든 애플리케이션은 메인 스레드가 main() 메소드를 실행하면서 시작한다. 메인 스레드는 main() 메소드의 ..

    java.util 패키지

    Date 클래스 특정 시점의 날짜를 표현하는 클래스 Date 객체 안에는 특정 시점의 연도, 월, 일, 시간 정보가 저장된다. Date now = new Date(); Calendar 클래스 달력을 표현한 클래스 추상 클래스이므로 new 연산자를 사용해서 인스턴스를 생성할 수 없다. Calendar 클래스의 정적 메소드인 getInstance() 메소드를 이용하면 현재 운영체제에 설정되어 있는 시간대를 기준으로한 Calendar 하위 객체를 얻을 수 있음 Calendar now = Calendar.getlnstance(); Calendar 객체를 얻으면, 연도, 월, 일, 요일, 오전/오후, 시간 등의 정보를 얻을 수 있음 [확인 문제] package yeong.verify.exam01; import j..

    java.lang 패키지

    자바 API 도큐먼트 API : 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음 API 도큐먼트 : 우리가 원하는 API를 쉽게 찾아 이용할 수 있도록 도와줌 API 도큐먼트에서 클래스 페이지 읽는 방법 Object 클래스 자바의 최상위 부모 클래스 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다. Object 클래스의 메소드는 모든 자바 객체에서 사용할 수 있다. - 객체 비교( equals() ) public boolean equals(Object obj) { ••• } equals() 메소드의 매개타입은 Object인데, 이것은 모든 객체가 매개값으로 대입될 수 있음을 말함 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문 비교 연산자인 ==과 동일한..

    익명 객체

    익명 객체 이름이 없는 객체 - 어떤 클래스를 상속하거나 인터페이스를 구현해야한다. 익명 객체를 생성할 때에는 클래스 이름이 없음 부모 클래스 변수는 이름이 없는 자식 객체를 참조 인터페이스 변수는 이름이 없는 구현 객체를 참조 익명 자식 객체 생성 자식 클래스가 재사용되지 않고 오로지 특정 위치에서 사용되는 경우 사용 ‘부모클래스(매개값, ...){… }' : 부모클래스를상속해서 중괄호{} 와같이 자식 클래스를 선언하라 new 연산자 : 선언된 자식 클래스를 객체로 생성 ‘부모클래스(매개값, ...)' : 부모 생성자를 호출하는 코드, 매개값은 부모 생성자의 매개 변수에 맞게 입력하면 된다. 중괄호 {} 내부 : 필드와 메소드를 선언하거나 부모 클래스의 메소드를 재정의하는 내용 작성 익명 자식 객체에 ..

    중첩 클래스와 중첩 인터페이스

    중첩 클래스 클래스 내부에 선언한 클래스 두 클래스의 멤버들을 서로 쉽게 접근 가능 코드의 복잡성을 줄일 수 있음 멤버 클래스 클래스의 멤버로서 선언되는 중첩 클래스 로컬 클래스 생성자 또는 메소드 내부에서 선언되는 중첩 클래스 - 멤버 클래스는 클래스나 객체가 사용 중이라면 언제든지 재사용이 가능하지만, 로컬 클래스는 메소드를 실행할 때만 사 용되고 메소드가 종료되면 없어진다. 중첩 클래스도 하나의 클래스이기 때문에 컴파일하면 바이트 코드 파일(.class)이 별도로 생성된다. - 멤버 클래스일 경우 - 로컬 클래스일 경우 인스턴스 멤버 클래스 - static 키워드 없이 중첩 선언된 클래스 - 인스턴스 필드와 메소드만 선언이 가능하고 정적 필드와 메소드는 선언 불가능 정적 멤버 클래스 - static..

    타입 변환과 다형성

    자동 타입 변환 - 구현 객체가 인터페이스 타입으로 변환되는 것 - 프로그램 실행 도중에 자동적으로 타입 변환이 일어난다 - 인터페이스 구현 클래스를 상속해서 자식 클래스를 만들었다면 자식 객체 역시 인터페이스 타입으로 자동 변환 가능 필드의 다형성 - 한국 타이어와 금호 타이어는 공통적으로 타이어 인터페이스를 구현했기 때문에 모두 타이어 인터페이스에 있는 메소드를 가지고 있다. => 따라서 타이어 인터페이스로 동일하게 사용할 수 있는 교체 가능한 객체에 해당 매개 변수의 다형성 - 자동 타입 변환은 필드 값을 대입할 때에도 발생하지만, 주로 메소드를 호출 할 때 발생한다. - 매개값을 다양화하기 위해서는 상속에서 매개 변수를 부모 타입으로 선언하고 호출할 때에는 자식 객체를 대입, - 매개 변수의 타입..

    인터페이스

    인터페이스 - 객체의 사용 방법을 정의한 타입 - 개발 코드와 객체가 서로 통신하는 접점 역할 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. => 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 됨 인터페이스 선언 인터페이스 선언은 class 키워드 대신에 interface 키워드를 사용 [public] interface 인터페이스이름 { ••• } # 인터페이스 이름 작성 방법 영어 대소문자 구분 첫 글자 대문자 나머지 소문자 interface 인터페이스이름 { //상수 타입 상수이름 = 값; //추상 메소드 타입 메소드이름(매개변수,…); } - 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없다. 상수 필드 선언 ..

    추상 클래스

    추상 클래스 Bird.class, Insect.class, Fish.class 등의 실체 클래스에서 공통되는 필드와 메소드를 따로 선언한 Animal.class 클래스를 추상 클래스라고 한다. 추상 클래스의 용도 공통된 필드와 메소드의 이름을 통일할 목적 실체 클래스를 작성할 때 시간 절약 공통적 인 필드와 메소드는 추상 클래스인 Phone에 모두 선언해두고, 다른 점만 실체 클래스에 선언하면 실체 클래스를 작성하는 데 시간을 절약할 수 있다. 추상 클래스 선언 추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙여야 한다. abstract를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다. public abstract class 클래스 ..

    타입 변환과 다형성

    다형성 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행 결과가 나오도록 하는 성질이다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 장착하느냐에 따라 주행 성능이 달라진다. 다형성을 구현하려면 메소드 재정의와 타입 변환이 필요 자동 타입 변환 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것 (ex) 부모타입 변수 = 자식타입; 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다. Cat cat = new Cat(); Animal animal = cat; // Animal animal = new Cat();도 가능 Cat 클래스로부터 Cat 객체를 생성하고 이것을 Animal 변수에 대입하면 자동 타입 변환이 일어난다. 바로 위의 부모가..

    상속

    클래스 상속 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 다음 과 같이 extends 뒤에 기술한다. class 자식클래스 extends 부모클래스 { // 필드 // 생성자 // 메소드 } 여러 개의 부모 클래스를 상속할 수 없다. 그러므로 extends 뒤에는 단 하나의 부모 클래스만 와야 한다. 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다. 부모 클래스와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외된다. 부모 생성자 호출 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성된다. DmbCellPhone dmbCellPhon..

    패키지와 접근 제한자

    패키지 선언 해당 클래스가 어떤 패키지에 속할 것인지를 선언하는 것 package 상위패키지.하위패키지; public class ClassName { ••• } 패키지 이름 규칙 숫자로 시작해서는 안 되고 $를 제외한 특수 문자를 사용해서는 안된다. java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용해서는 안된다. 모두 소문자로 작성하는 것이 관례이다 import문 사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면, import문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 것임을 컴파일러에게 알려줘야 한다. 상위 패키지를 import했다고 해서 하위 패키지까지 import되는 것은 아니다. import 상위패키지. 하위패키지. 클래스이름; import ..