목록오버라이딩 (6)
개발 무지렁이

𐂂 운영체제(os)는 실행중인 프로그램을 프로세스로 관리한다. 운영체제는 멀티프로세스를 생성해서 처리하지만, 하나의 프로세스 내에서 멀티태스킹을 할 수도 있다. 하나의 프로세스가 두가지 이상의 작업을 처리할 수 있는 이유는 멀티스레드가 있기 때문이다. 𐁍 '스레드' 란 코드의 실행흐름을 말한다. 멀티스레드는 하나의 프로세스 내부에서 생성되기 때문에 하나의 스레드가 예외를 발생시키면, 프로세스가 종료되므로 다른 스레드에 영향을 미친다. ⚠️ 멀티스레드를 사용하는 경우 예외처리에 신경써야한다. ⚠️ 멀티스레드에서는 실행 중인 스레드가 하나라도 있다면, 프로세스는 종료되지 않는다. ➼ 🦔 모든 자바 프로그램은 메인스레드가 main메서드를 실행하면서 시작된다. 멀티스레드로 실행하는 프로그램을 개발하려면 먼저, ..

인터페이스(Interface) ⚠️ 클래스가 아니다. 객체생성x, 상속x 추상 메서드(abstract method)만을 가지고 있는 형태 ※ 단, 인터페이스 내부에는 디폴트 메서드, 정적 메서드가 올 수 있다. 🎯 목적: ✔️ 다중상속과 같은 효과를 낼 수 있다. ✔️ 소통을 위한 규격의 역할을 한다. 🧩 확장성 🧩 유지보수 > 🦔 인터페이스의 변수는 항상 앞에 public static final이 붙는다.(생략) WHY? 인터페이스는 규격과 같은 역할을 한다. ❓static이 없다면? 구현객체마다 초기화값이 다르다. ➡️ 🗿 규격의 의미가 없어진다. ❓final이 없다면? 구현객체마다 변수의 값을 바꿀 수 있다. ➡️ 🗿 규격의 의미가 없어진다. 🗿 즉, 인터페이스가 만들어질 때, 한번 진정한 상수를 ..

상속 ⚠️ Java는 다중상속이 안된다. 생성자(Constructor)와 private 요소를 제외한 부모 클래스의 모든 것을 상속받는다. Why 확장은 용이하고, 재사용성이 높아지고, 코드가 간결해진다. 📌 class A extends B = A is B = (1) A를 A라 부를 수 있다. = (2) A를 B라 부를 수 있다. (단, 부르는 호칭에 따라 접근에 제한이 생긴다.) ⚠️ Java의 모든 class는 Object(Java 최고조상)를 상속받는다. = 모든 객체를 Object라 부를 수 있다. 📌 Polymophism(다형성) B b = new A(); (상속관계에서, 의미적으로* 부모가 자식보다 크다.)상속과 Polymophism 상속이 없으면 Polymophism을 얘기할 수 없다. [멤..

Calendar now = new GregorianCalendar(); import java.util.Calendar; import java.util.GregorianCalendar; public class GregorianCalendarTest { public static void main(String[] args) { Calendar now = new GregorianCalendar(); System.out.println(now); // java.util.GregorianCalendar[time=1678610593319,areFieldsSet=true,... // Calendar 클래스 내에 toString이 오버라이딩 되어있다 System.out.printf("%1$tY년 %1$tm월 %1$td일 ..

메서드는 가장 아래에 오버라이딩된 메서드가 우선순위를 가진다. class Main { public static void main(String[] args) { 사람 a사람 = new 사람(); // 사람리모콘 a사람.이름 = "사람"; 동물 a동물 = a사람; // 리모콘 버튼 빼기 => 동물리모콘 a동물.이름 = "동물"; System.out.println(a사람.이름); // 사람 a사람.공격(); // 사람이 공격합니다 System.out.println(a동물.이름); // 동물 a동물.공격(); // 사람이 공격합니다 } } class 동물 { String 이름; void 공격() { System.out.println("동물이 공격합니다"); } } class 사람 extends 동물 { Stri..

옵저버 패턴 관찰대상에 변화가 생겼을 때, 연결된 대상에 2차적 행동을 하는 구조를 말한다. 관찰대상(버튼)이 있어야 한다. 관찰대상(버튼)에 무언가를 맡겨야 한다. 변화가 생겼을 때, 연결된 Listener의 메서드를 호출해야 한다. Listener를 따르는 클래스의 오버라이딩된 메서드에서 실제 작동하는 메서드를 호출해준다. ❓ Listener는 표준 규격이다. : 2022년 자동차(버튼)를 만들 때 국제 표준 타이어 규격(Listener)에 맞춘다 2028년 미쉐린 타이어(클래스)를 만들 때, 국제 표준 타이어 규격(Listener)을 따라서 만든다 2028년 한국 타이어(클래스)를 만들 때, 국제 표준 타이어 규격(Listener)을 따라서 만든다 2022년에 만든 자동차에 2028년에 만든 미쉐린..