Computer Science/JAVA
-
쓰레드(2)Computer Science/JAVA 2021. 8. 20. 22:38
1️⃣ 쓰레드의 실행제어 효율적인 멀티쓰레드 프로그램을 만들기 위해서는 정교한 스케줄링을 통해 프로세스에게 주어진 자원과 시간을 여러 쓰레드가 낭비없이 잘 사용되도록 프로그래밍 해야함. [ 쓰레드 실행 과정 ] 쓰레드를 생성하고 start()를 호출하면 바로 실행되는 것이 아니라 실행 대기열에 저장되어 자신의 차례가 될 때까지 기다린다. 실행대기열은 큐의 형태로 먼저 실행 대기열에 들어온 쓰레드가 먼저 실행된다. 실행대기상태에 있다가 자신의 차례가 되면 실행 상태가 된다 주어진 실행시간이 다 되거나 yield()를 만나면 다시 실행대기상태가 되고 다음 차례의 쓰레드가 실행상태가 된다 실행 중에 suspend(), sleep(), wait(), join(), I/O block에 의해 일시 정지 상태가 될 ..
-
쓰레드(1)Computer Science/JAVA 2021. 8. 20. 22:38
1️⃣ 프로세스와 쓰레드 프로세스란 간단히 말해 실행중인 프로그램이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다. 그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며 둘 이상의 쓰레드를 가진 프로세스를 '멀티 쓰레드 프로세스'라고 한다. 하나의 프로세스가 가질 수 있는 쓰레드의 개수는 제한되어 있지 않지만 쓰레드가 작업을 수행하는데 개별적인 메모리 공간을 필요로 하기 때문에 프로세스의 메모리 한계에 따라 생성할 수 있는 쓰레드의 수가 결정된다. [ 멀티태스킹과 멀티 쓰레딩 ..
-
애너테이션Computer Science/JAVA 2021. 8. 20. 22:38
1️⃣ 애너테이션이란 애너테이션은 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다. 애너테이션은 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공할 수 있다는 장점이 있다. 2️⃣ 표준 애너테이션 @Override 메서드 앞에만 붙일 수 있는 애너테이션으로, 조상의 메서드를 오버라이딩하는 것이라는걸 컴파일러에게 알려주는 역할을 한다. 오버라이딩할 때 메서드의 이름을 잘못 적는 경우가 많은데, @Override를 붙이면 컴파일러가 같은 이름의 메서드가 조상에 있는지 확인하고 없으면, 에러 메시지를 출력한다. Class Parent { void parentMethod() {} } Class Child extends Parent..
-
열거형(enums)Computer Science/JAVA 2021. 8. 20. 22:38
1️⃣ 열거형이란? 열거형은 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용함. 자바의 열거형은 C언어의 열거형보다 더 향상된 것으로 열거형이 갖는 값뿐만 아니라 타입도 관리하기 때문에 논리적인 오류를 줄일 수 있다. class Card { static final int CLOVER = 0; static final int HEART = 1; static final int DIAMOND = 2; static final int SPADE = 3; static final int TWO = 0; static final int THREE = 1; static final int FOUR = 2; final int kind; final int num; } //==========..
-
GenericsComputer Science/JAVA 2021. 8. 20. 22:38
1️⃣ 지네릭스란? 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성을 높인다는 건 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다는 뜻이다 2️⃣ 지네릭 클래스의 선언 class Box { T item; void setItem(T item) { this.item = item; } T getItem() { return item; } } Box에서 T를 타입 변수라고 한다. 타입 변수는 T가 아닌 다른 것을 사용해도 된다. 타입 변수..
-
String, StringBuilder, StringBufferComputer Science/JAVA 2021. 8. 20. 22:38
1️⃣ String 클래스 변경 불가능한 클래스(immutable 클래스) String클래스에는 문자열을 저장하기 위해서 문자열 배열 참조변수 value를 인스턴스 변수로 정의하고 있습니다. 한 번 생성된 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없습니다. '+'연산자를 이용해서 문자열을 결합하는 경우는 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성되게 됩니다. 문자열 간의 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우 String 클래스 대신 StringBuffer클래스를 사용하는 것이 좋습니다. 문자열 비교 문자열을 만들 때는 문자열 리터럴을 지정하는 방법과 String 클래스의 생성자를 사용..
-
Object 클래스Computer Science/JAVA 2021. 8. 20. 22:38
Object 클래스는 모든 클래스의 최고 조상이기 때문에 Object 클래스의 멤버들은 모든 클래스에서 바로 사용 가능합니다. equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean 값으로 알려주는 역할을 합니다. public class EqualsEx1 { public static void main(String[] args) { Person p1 = new Person(1234); Person p2 = new Person(1234); System.out.println(p1 == p2); -> false System.out.println(p1.equals(p2)); -> true } } class Person { long id; Person(long id)..
-
예외 처리Computer Science/JAVA 2021. 8. 12. 22:38
1️⃣ 프로그램 오류컴파일 에러 : 컴파일 시에 발생하는 에러런타임 에러 : 실행 시에 발생하는 에러논리적 에러 : 실행은 되지만, 의도와는 다르게 동작하는 것 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 (스택오버플로, 메모리부족)예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 2️⃣ 예외 클래스 계층 구조 Checked Exception 컴파일러가 예외처리를 확인하는 Exception 클래스컴파일 단계에서 발생무조건 예외처리 해야된다예외 발생 트랜잭션 처리 시 롤백은 하지 않아도 됨Unchecked Exception (런타임 익셉션)컴파일러가 예외처리를 확인하지 않는 Exception 클래스런타임 단계에서 발생반드시 예외처리를 해야 되..