본문 바로가기

개발 관련 지식/JAVA37

멀티 스레드 개념 운영체제에서는 실행 중인 하나의 애플리케이션을 프로세스라고 한다. 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하면 프로세스라고 불린다. 하나의 애플리케이션이 여러 프로세스를 만들기도 한다. 예를 들면 크롬이라는 애플리케이션을 두 개 실행했다면 두개의 크롬 프로세스가 생성된 것이다. 멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 말한다. 운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당해주고, 병렬로 실행시킨다. 멀티 태스킹이 반드시 멀티 프로세스를 뜻하는 것은 아니다. 한 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션도 있다. 예를 들면 미디어 플레이어는 동영상 재생과 소리 재생 두 작업을 동시에 하고, .. 2020. 4. 4.
예외 처리 예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서는 에러와 동일하다. 그러나 예외는 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다. 일반 예외와 실행예외가 있다. 일반 예외는 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사하는 것이다. 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다. 실행 예외는 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외이다. 컴파일 시 예외 처리를 확인하는 차이일 뿐, 두 가지 예외는 모두 예외 처리가 필요하다. 실행 예외 실행 예외는 자바 컴파일러가 체크를 하지 않기 때문에 오로지 개발자의 경험에 의해서 예외 처.. 2020. 4. 3.
인터페이스에서 디폴트 메소드 최초에 A라는 인터페이스가 있었다고 가정을 하자. A 인터페이스를 구현하는 B 클래스에서 A 인터페이스의 추상 메소드를 구현해놨다. 나중에 A 인터페이스에 새로운 기능을 추가해야 해서 새로운 추상 메소드를 선언했다. 근데 B 클래스에서 추가된 추상메소드를 구현할 여건이 안된다면, 에러가 발생할 것이다. 이럴 때 디폴트 메소드를 선언한다. A 인터페이스에 있는 디폴트 메소드는 B 구현 클래스에서 반드시 구현할 필요가 없기 때문에 B 클래스를 문제 없이 사용이 가능하다. 물론 C라는 구현 클래스가 추가 된다면 추상메소드를 반드시 구현해야하지만, 새로운 기능인 디폴트 메소드를 A 인터페이스에 선언한대로 사용해도 되고, 재정의해서 사용해도 된다. 2020. 4. 2.
인터페이스 상속 인터페이스는 클래스와 달리 다중 상속을 허용한다. public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {...} 하위 인터페이스를 구현하는 클래스는 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 가지고 있어야 한다. 그렇기 때문에 구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위 인터페이스 타입으로 변환이 가능하다. 하위인터페이스 변수 = new 구현클래스(...); 상위인터페이스1 변수 = new 구현클래스(...); 상위인터페이스2 변수 = new 구현클래스(...); 하위 인터페이스로 타입 변환되면 상위 인터페이스들과 하위 인터페이스의 모든 메소드를 사용할 수 있고, 상위 인터페이스로 타입이 변환되면 상위 인터페이스에 선언된 메소드.. 2020. 4. 2.
인터페이스 타입변환과 다형성 상속은 같은 종류의 하위 클래스를 만드는 기술이고, 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이다. 메소드 호출 시 어떤 구현 객체를 매개값으로 주느냐에 따라서 메소드의 실행 결과는 다르게 나온다. 예를 들면, 인터페이스 A의 구현 클래스 B와 C가 있을 때, B클래스를 통해서 원하는 결과가 나오지 않으면 간단하게 C클래스로 바꿔서 실행 할 수 있다. 그것을 유용하게 바꾸기 위해 인터페이스는 메소드의 매개 변수로 많이 사용된다. 매개 변수를 인터페이스 타입으로 선언하면 메소드 호출 시 매개 값으로 다양한 구현 객체를 주어서 다양한 실행 결과가 나오게 할 수 있다. public interface A { // .... } public class B implements A { // .... } pu.. 2020. 4. 2.
인터페이스 인터페이스는 객체의 사용 방법을 정의한 타입이다. 인터페이스는 객체의 교환성을 높여주기 때문에 다형성을 구현하는데 매우 중요하다. 인터페이스는 코드와 객체가 서로 통신하는 접점 역할을 한다. 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 그리고 객체가 반환한 데이터를 인터페이스가 코드에 반환한다. 인터페이스를 사용하는 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다. 인터페이스는 하나의 객체가 아니라ㅏ 여러 객체들과 사용이 가능하기 때문에 어떤 객체를 사용하느냐에 따라 실행 내용과 리턴값이 달라질 수 있다. 따라서 코드 변경없이 실행 내용과 리턴값을 다양화 할 수 있다. 인터페이스 선언은 class 대신에 interface라고 적으면 .. 2020. 4. 1.