Programming Languages/Java(18)
-
[Java] Thread
Thread란? 쓰레드를 알아보기 전에 프로세스에 대해 먼저 이해하도록 하자. 프로세스(Process)는 간단하게 말하면 실행 중인 프로그램이다. 프로그램은 일반적으로 하드 디스크, SSD 등의 저장 장치에 저장되어 있다. 이 프로그램을 실행 시켜 사용하려면 우리는 보통 exe와 같은 실행 파일을 시작시킨다. 그러면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 메모리에 프로그램이 적재되고 우리가 프로그램을 사용할 수 있게 된다. 프로세스는 프로그램을 실행하는데 필요한 데이터, 메모리 공간, 기타 자원과 쓰레드로 구성되어 있다. 그리고 프로세스의 자원을 사용해서 실제로 작업을 수행하는 것이 쓰레드이다. 쓰레드는 한 프로세스에 여러 개가 존재할 수 있다. 한 프로세스에서 여러 쓰레드를 사용하는 프로세스..
2021.10.19 -
[Java] 추상 클래스
추상 메소드(abstract method) 선언은 되어 있으나 코드가 구현되어 있지 않은 메소드이다. 추상 메소드를 작성하려면 abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다. public abstract String getName(); public abstract void setName(String s); 코드를 작성하면 추상 메소드가 될 수 없다. 추상 클래스가 되는 경우 1. 추상 메소드를 포함하는 클래스 absrtact class Shape { // 추상 클래스 선언 public Shape() {} public void paint() { draw(); } abstract public void draw(); // 추상 메소드 선언 } 추상 메소드를 포함하면 반드시 추상 클래스로..
2020.05.01 -
[Java] 메소드 오버라이딩(method overriding)
메소드 오버라이딩 슈퍼 클래스에 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 갖는 메소드를 서브 클래스에서 재작성하는 것으로, 슈퍼 클래스와 서브 클래스의 메소드 사이에서 발생한다. '슈퍼 클래스 덮어쓰기'로 생각하면 이해하기 쉽다. 오버라이딩했을 경우 서브 클래스의 메소드가 우선적으로 실행된다. 이런 처리를 동적 바인딩이라고 부른다. 아래 코드를 보자. class Shape { public void draw() { System.out.println("Shape"); } } class Line extends Shape { @Override public void draw() { System.out.println("Line"); } } class Rect extends Shape ..
2020.04.27 -
[Java] 업캐스팅, 다운캐스팅, instanceof
캐스팅이란? 캐스팅(casting) : 타입 변환을 의미한다. 클래스에 대한 캐스팅 - 업캐스팅(upcasting), 다운캐스팅(downcasting) 2가지가 있다. 업캐스팅 서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환하는 것이다. > 서브 클래스는 슈퍼 클래스를 상속받았기 때문에, 서브 클래스의 객체는 슈퍼 클래스의 멤버를 모두 가진다는 점에서 서브 클래스의 객체를 슈퍼 클래스의 객체로 취급할 수 있다. Person p; // 상속받은 레퍼런스 p Student s = new Student(); // Student 객체 생성, 레퍼런스 s 생성 p = s; // 슈퍼 클래스 레퍼런스 p는 서브 클래스 s의 레퍼런스를 가진다. 하지만 p의 멤버에만 접근가능하다. 업캐스팅한 레퍼런스로..
2020.04.27 -
[Java] 상속과 생성자
서브 클래스와 슈퍼 클래스 각각 생성자를 가지고 있다. 그렇다면 생성자의 실행은 어떻게 될까? > 둘 다 실행되며, 슈퍼 클래스의 생성자가 먼저 생성된 후 서브 클래스의 생성자가 생성된다. 예를 들어, class A, class B extends A, class C extends B 이렇게 상속 관계가 있다고 하자. 메인에서 class C의 객체를 생성하면 class A { 3. A 생성자 호출 public A() { } 4. A 생성자 리턴 } class B extends A{ 2. B 생성자 호출 public B() { } 5. B 생성자 리턴 } class C extends B { 1. C 생성자 호출 public C() { } 6. C 생성자 리턴 } public class Main { publi..
2020.04.21 -
[Java] 상속과 접근 지정자
슈퍼 클래스 멤버에 접근하는 클래스 종류 슈퍼 클래스 멤버의 접근 지정자 private default protected public 같은 패키지에 있는 클래스 x o o o 다른 패키지에 있는 클래스 x x x o 같은 패키지에 있는 서브 클래스 x o o o 다른 패키지에 있는 서브 클래스 x x o o private - 오직 같은 클래스 내에서만 접근 가능. default - 같은 패키지 내의 클래스에서만 접근 가능. protected - 같은 패키지 내의 클래스 or 패키지와 상관없이 상속받는 서브 클래스에서 접근 가능. public - 모든 클래스에서 접근 가능.
2020.04.21