swimminginthecode DIVE!

BACK/JAVA Basic 23

JAVA 13

wait() 스레드 동기화를 위한 Object의 인스턴스 메소드로, synchronized 블록 내에서만 호출이 가능하다. 현재 스레드를 다른 객체가 이 객체에 대한 notify() 메소드를 호출할 때까지 대기한다. notify() wait() 메소드로 인해 대기 중인 스레드를 하나 깨운다. wait() 과 sleep() sleep() 메소드는 현재 스레드를 잠시 멈추게 할 뿐, lock을 release하진 않는다. synchronized 동기화가 필요한 메소드나 코드블럭 앞에 사용하여 동기화할 수 있으며, synchronized로 지정된 임계 영역은 한 스레드가 이 영역에 접근하여 사용할 때 lock이 걸림으로써 다른 스레드가 접근할 수 없게 된다. lock은 해당 객체당 하나씩 존재하며, synchr..

BACK/JAVA Basic 2024.04.19

JAVA 12

Process(프로세스) 와 Thread (스레드) 하나의 응용프로그램은 운영체제에 의해 process(작업 단위)를 확보하고, 응용프로그램의 실행은 thread(실행 단위)가 담당한다. 기본적으로 main thread 에 의해 응용 프로그램이 실행되며, thread의 갯수 만큼 실행 단위를 늘릴 수 있다. (멀티 thread에 의한 멀티 tasking이 가능) Thread 와 Runnable Thread 클래스를 사용하거나 Runnable 인터페이스를 구현하여 사용할 수 있다. 종류 특징 Thread 클래스를 상속받은 경우, 상속받은 클래스 자체를 스레드로 사용할 수 있다. Thread 클래스의 메소드 (getName())을 바로 사용할 수 있다. Runnable 해당 클래스를 인스턴스화해서 Threa..

BACK/JAVA Basic 2024.04.18

JAVA 11

예외 처리 try ~ catch 구문을 사용하여 에러가 발생할 때를 대비할 수 있다 예외 처리 해 보기 public void method() { try { int a[] = {1, 2, 3}; System.out.println(a[6]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("배열 인덱스 오류") } } console 배열 인덱스 오류 -> try 블럭 안에 있는 로직에서 배열 밖을 호출하였으므로 ArrayIndexOutOfBoundsException 에러가 발생하였고, 그에 따라 지정한 catch 문으로 이동하여 블럭 안 프린트문을 출력 -> catch () 괄호 안에 Exception 으로 입력하면 모든 에러에 반응 -> ..

BACK/JAVA Basic 2024.04.17

JAVA 10

익명 객체 자식 클래스가 재사용되지 않고, 오로지 특정 위치에서 사용할 경우에 사용하는 익명 자식 객체 익명 객체 사용해 보기 public class AnonyMain { public static void main(String[] args) { Saram saram = new Saram(); System.out.println(saram.getIr()); Person person = new Person(); Saram saram2 = person.getSaram(); System.out.println(saram2.getIr()); } } public class Saram { String ir = "김바보"; public String getIr() { return ir; } } public class Per..

BACK/JAVA Basic 2024.04.15

JAVA 09

인터페이스란 추상 메소드와 상수로 구성된 클래스로, 다중 상속이 가능하며 인스턴스할 수 없는 클래스 인터페이스 선언 접근제한자 interface 인터페이스이름 {} 구현 클래스 접근제한자 class 클래스이름 implements 인터페이스이름 {} 인터페이스에서 정의된 추상 메소드를 오버라이딩하는 클래스 추상 클래스와 인터페이스 구분 추상클래스 인터페이스 공통점 객체 생성 객체를 생성(인스턴스화)할 수 없다 추상 메소드 추상 메소드를 포함한다 기능적 목적 상속받는 클래스에서는 추상 메소드를 반드시 재정의하여 구현해야 한다 차이점 개념적 목적 상속받아서 기능을 확장시키는 데 목적이 있다 구현 객체의 동일한 실행 기능을 보장하는 데 목적이 있다 클래스 abstract class, 클래스다 interface,..

BACK/JAVA Basic 2024.04.12

JAVA 08

추상 클래스 클래스의 공통적인 특성을 추출해서 선언한 클래스 추상 클래스의 용도 1. 공통된 필드와 메소드의 이름을 통일할 목적 - 데이터와 기능이 모두 동일함에도 불구하고 객체마다 사용 방법이 달라짐을 방지하기 위함 2. 실체 클래스를 작성할 때 시간 절약 - 설계 규격을 만들어 배포함으로써 구체적인 요구 가능 추상 클래스 선언 [접근제한자] abstract class 클래스명 {} 추상 메소드에 대하여 추상 클래스는 실체 클래스가 공통적으로 가져야 할 필드와 메소드를 정의해놓은 추상적인 클래스로, 실체 클래스의 멤버(필드, 메소드)를 통일하는 데 목적이 있다. 하지만 메소드의 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 할 경우, 추상 메소드를 선언할 수 있다. - 반드시 실행 내용을 채우도록..

BACK/JAVA Basic 2024.04.11

JAVA 07

상속 하나의 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에 일반화 관계가 존재하는데, 이런 일반화 관계를 상속 관계(is a kind of) 라고 한다 상속 선언 접근제한자 class 클래스이름 extends 상위클래스이름 오버라이딩(overriding) 부모와 같은 이름의 메소드를 선언하는 것 최상위 슈퍼 클래스 : object 모든 클래스는 자동으로 object 클래스를 상속받음 클래스 상속 개념에서 주의할 점 01 상위 클래스 타입 변수에 하위 클래스 주소를 치환할 수 있음 public class a extends b {} b c = a; // 가능 a c = b; // 불가능 a 클래스를 b 클래스의 하위 클래스로 지정했다고 가정했을 때, b type 을 가진 c 라는 변수에 ..

BACK/JAVA Basic 2024.04.05

JAVA 06

Singleton 객체의 인스턴스가 오직 한 개만 생성되는 패턴을 만들기 private static class01 class1 = new class01(); public static class01 getInstance() { return class1; } -> new 키워드를 사용하지 않고 main 에서 호출할 수 있게 하는 패턴 기본형과 참조형에서 주의할 점 기본형은 값 자체를 저장하고 참조형은 주소를 저장한다 -> 주소를 저장하는 참조형은 하나의 object을 참조하여 사용하는 것을 주의하여야 한다 객체지향프로그래밍 (oop) 특징 종류 특징 캡슐화 서로 연관 있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것 추상화 객체의 공통적인 속성과 기능을 추출하여 정의하는 것 상속성 ..

BACK/JAVA Basic 2024.04.04

JAVA 05

Over loading이란? 한 개의 클래스 내에 이름이 같은 메소드를 여러 개 선언하는 것 Over loading 의 성립 조건 매개변수의 갯수, type, 순서가 달라야 하며 반환형과는 관계 없음 Over loading 의 예시 public class Example { private int a = 1; private double b = 2.0; private String c = "c"; public Example() { System.out.println("모두 알 수 없음"); } public Example(int a) { System.out.println("a : " + a + "/ b, c는 알 수 없음"); } public Example(double b) { System.out.println("..

BACK/JAVA Basic 2024.04.03

JAVA 04

접근지정자 종류 의미 + public · 같은 project 내에서 유효 · 다른 package에 있어도 유효 - protected · 같은 project 내에서 유효 · 다른 package에 있는 경우, 자식 클래스에서만 유효 default · 같은 package 내에서 유효 # private · 현재 class 내에서 유효 클래스 선언 [접근지정자][기타제한자] class 클래스이름 {} 예를 들어 이름이 a인 클래스를 선언한다고 하면, public class a {} main에서 클래스 사용하기 위 예시에서 선언한 a를 main에서 사용하기 위해 인스턴스화 a b = new a(); 이름 역할 a 보조기억장치에 있는 a.class를 주기억장치로 로딩 b 객체 변수 new 인스턴스화를 위한 키워드 a..

BACK/JAVA Basic 2024.04.02