쓰레드란?OS에서 크롬을이용해 인터넷을 하면서 동시에 한글문서를 작성하기도하고 동영상을 시청하기도 한다. 동시에 여러 프로그램이 실행이되도 CPU는 시간을 분할하여 프로세스마다 우선권을 주어 작업을 처리하기 때문이다. 이런 운영체제에서 실행되는 하나의 프로그램 단위를 프로세스 라고한다. 쓰레드는 프로세스내에서 실행되는 세부 작업단위이다. 프로세스가 하나 이상의 쓰레드를 사용한다면 멀티 쓰레드라고 부르게 된다. 프로세스 = 운영체제에서 실행되는 하나의 프로그램 단위이다 (ex. 크롬, 한글, 엑셀)쓰레드 = 프로세스내에서 실행되는 세부 작업단위 쓰레드 생성방법Thread를 만드는 방법은 Thread 클래스를 상속받는 방법과 Runnable인터페이스를 구현하는 방법이 있다.public class Thread..
예외란자바를 사용하다보면 null값을 갖는 참보변수를 사용하는 경우나 배열에서 인덱스 범위를 초과해 사용한다면 예외가 발생하면서 어플리케이션이 종료가 된다. 발생하는 예외에 대응하고 어플리케이션이 종료되지않게 하기위해서는 예외처리를 해줘야한다. 예외 처리 코드(try-catch-finally)프로그램에서 예외가 발생헀을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다. 예외 처리 코드는 try-catch-finally문을 이용한다. try{ 예외가 발생할 가능성이있는 명령어; }catch(예외타입1 변수명){ 예외타입1 발생시 처리 할 명령어들; }catch(예외타입2 변수명){ 예외타입2 발생시 처리 할 명령어들; }finally{ 예외 ..
인터페이스(interface)는 객체의 사용 방법을 정의한 타입니다. 클래스와 유사하지만 메소드의 구현부가 없이 구현할 클래스의 뼈대를 만들어준다. 인터페이스에서 뼈대 (객체가 가져야할 특징,특성)를 잡아주면 클래스는 인터페이스를 implements 하여 살을 붙인다. 인터페이스가 뼈대 만 잡아주기때문에 메소드의 선언만할 수 있고 구현할 수 없다. 또한 필드를 선언할 수 없지만 상수 필드는 선언이 가능하다. 이러한 특징떄문에 인터페이스는 객체화 할 수없다 (생성자도 없다) 인터페이스를 사용하는방법은 구현 클래스를 만들어 사용하는 방법 뿐이다. 선언인터페이스 선언은 class키워드 대신 interface 키워드를 사용한다.interface 인터페이스명 { //상수 타입 상수명 = 값; //추상 메소드 타입..
추상 클래스(Abstract Class)는 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 말한다. 추상클래스는 말그대로 공통되는 특성을 추상적으로 만들었기 때문에 클래스 자체로 역할을 하지못한다. 즉 new 연산자를 이용하여 객체를 만들수 없다. 추상클래스는 실제 클래스들을 만들기 위한 부모클래스로만 사용할 수 있다. 사용은 다음과같이 abstract 키워드를 사용한다public abstract class 클래스이름 { //필드 //생성자 //메소드 //추상메소드 } 추상 클래스는 추상 메소드를 선언 할 수 있다. 추상메소드는 { }중괄호 없이 리턴타입, 메소드명, 매개변수를 포함하여 오직 선언만 해놓은 메소드를 말한다. 추상메소드도 abstract 키워드를 사용한다.public abstract 리..
다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 자바에서는 부모 타입에 모든 자식객체가 대입될 수 있다. Parent라는 클래스를 상속받은 Boy와 Girl라는 클래스가 있다고하면 다음과같이 부모클래스타입에 자식객체를 대입할 수있다.Parent parant1 = new Boy(); //자식타입은 부모타입으로 자동 타입 변환이 가능하다. Parent parent2 = new Girl();이런 방식을 왜 사용할까?다형성을 구현 하는 방법이기 때문이다. 다형성은 위에 설명한것과 같이 동일한 타입을 사용하지만 다양한 결과가 나오는 성질을 말한다.(하나의 Parent타입..
현실에서 상속은 부모가 자식에게 물려주는 행위를 말한다. JAVA에서도 부모클래스(상위클래스)의 필드와 메소드를 자식클래스(하위클래스)가 상속받아 자신의 것처람 사용할 수 있다. 상속의 방법은 클래스 선언시 다음과 같이 extends를 사용하면된다.class 자식클래스 extends 부모클래스하나의 부모클래스는 여러개의 자식클래스를 가질수있지만 자식클래스는 하나의 부모클래스만 가질수 있다. (즉 자식클래스는 여러개의 클래스를 상속받지 못한다)자식클래스는 부모클래스가 될수있다. (A클래스를 상속받은 B클래스를 다시 C라는 클래스가 상속받은경우 C는 A의자원까지 사용할 수있다)상속으로 모든 필드와 메소드를 물려받는것이 아니라 private 접근제한을가진 자원은 제외된다.그렇다면 자바에서 상속은 왜 사용할까?..
접근제한 다른패키지 클래스 같은 패키지 클래스 자식 클래스 본인 클래스 public O O O O protected X O O O default X O X O private X X X O 클래스, 필드, 생성자, 메소드에 접근제한자를 사용하여 접근할 수 있는 범위를 정할 수 있다.public은 외부 클래스에서 자유롭게 접근, 사용 할 수 있다.protected는 같은 패지키내 클래스나 자식클래스에서만 사용 할 수 있다.default는 접근제한자를 적용하지 않았을때 말그대로 default로 적용되는 제한자이다. 사용은 같은 패키지내에 있는 클래스에서만 사용 할 수 있다.private는 외부클래스에서 접근할 수 가없고 클래스 내부에서만 사용할 수 있다. //default 접근 제한 class ClassNam..
클래스를 만들어 놓으면 해당클래스로 여러개의 객체를 생성하여 사용할 수 있다. 클래스의 구조public class ClassName { int FildName; //필드 public className() { //생성자 } public void methodName(){ //메소드 } } 필드객체의 데이터를 저장하는 곳으로 변수라고 생각하면된다. 생성자new 연산자로 해당 클래스를 객체로 만들때 호출되어 객체 생성시 초기화를 담당한다.생성자는 { } 안에서 필드를 초기화하거나 메소드를 호출하거나 한다.생성자는 클래스 이름과 동일하며, 리턴값이 없다.생성자는 오버로딩하여 여러개를 만들수 있다.클래스에 생성자를 코딩해놓지 않으면 컴파일러는 자동으로 Default 생성자(매개변수가 없는 생성자)를 추가시킨다.단 ..
같은 타입의 변수를 여러개를 묶어서 사용하기 위해 배열을 사용한다. 배열 또한 여러개 묶어서 배열로 사용할 수 있다. 이것이 바로 2차원 배열이다. 2차원 배열은 배열들을 배열형태로 가지고 있는 것을 말한다. 스택에있는 배열 변수는 힙영역의 배열의 첫번째 인덱스의 주소값을 가지고 있고 힙영역에있는 배열의 인덱스들은 다시한번 각각의 인덱스별 배열에대한 주소를 가지고 있다. 2차원 배열의 생성과 사용타입[ ]는 배열을 의미하지만 배열안에 배열이기때문에 타입[ ][ ]으로 사용한다. int[][] Array = new int[3][2]; // 2차원 배열의 선언 Array[0] = 3; // 오류!! Array[0][2] = 3;Array[ ]에는 int형 자료가 들어있는것이 아니라 int형 배열이 들어있기때..
배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 놓은 자료구조이다. 배열의 특징같은 타입의 데이터만 저장할 수 있다.한번 생성된 배열은 길이를 늘리거나 줄일 수 없다.인덱스는 0부터 시작한다.배열은 참조 타입이기때문에 스택영역에서 배열변수는 힙영역에 있는 배열의 첫인덱스(0)의 주소값을 가지고 있다. 배열의 선언 타입[ ] 변수; 타입 변수[ ]; ※ 배열은 참조 타입 이라서 null값으로 선언이 가능하다. 배열의 생성 타입[ ] 변수 = { 값0, 값1, 값2, 값3}; //값을 넣으면서 생성하는 방법 타입[ ] 변수 = new 타입[배열크기]; // 크기만 지정해서 생성하는 방법 이미 생성된 배열에 { }를 이용한 생성(수정)은 허용되지 않는다. 첫 생..