interface 와 abstract 차이
·
JAVA
📍 interface 예시interface Animal { void sound(); void eat();}class Dog implements Animal { public void sound() { System.out.println("멍멍"); } public void eat() { System.out.println("사료 먹는다"); } // 구현 필수}Animal은 “동물이라면 sound()를 구현해야 해”라는 약속구현 내용은 강제하지 않음📍 abstract class 예시abstract class Animal { void eat() { System.out.println("먹는다"); // 공통 구현 (구현 안 해도 OK) } abstract vo..
[ java ] Static 메서드에서 Field 접근
·
JAVA
📌 Static 메서드에서 Field 접근Static method는 인스턴스 생성 전에도 사용 가능static 필드에만 접근이 가능하다.instance 필드는 인스턴스 생성 전에는 사용이 불가능하기 때문에instanceMethod는 인스턴스 생성 후에 사용 가능instance필드, static 필드 둘다 접근이 가능하다.public Eclass(){ public static int sField; //staticField public int iField; //instanceField public static void staticMethod(){ System.out.println(sField); System.out.println(iField); //오류 발생 } public void instan..
[ java ] 인터페이스 (다중구현, static, default)
·
JAVA
📌 인터페이스란?public interface Flyable { public void 날다();}public class 나비 implements Flyable{ @Override public void 날다() { System.out.println("나비가 훨훨 납니다"); }}public class FlyableTest { public static void main(String[] args) { Flyable flyable = new 나비(); //객체 생성은 안되지만 타입으로 사용 가능 }}인터페이스는 클래스가 구현해야할 메서드의 형식을 정의하는 청사진(계약서) 역할을 한다.인터페이스를 구현할때는 implemets를 사용한다.클래..
[ java ] Optional 이란?
·
JAVA
📘 Optional이란?Null 값을 감싸는 Wrapper클래스이며, Null값을 참조 또는 사용하더라도 NullPointException(NPE)가 발생하지 않게 도와준다.Java8에서 도입된 클래스이며, Optional 클래스를 사용해 NullPointException(NPE)를 방지할수 있다.📎 Optional 특징 ?값이 없을때 적절한 처리( Ex. 기본값 제공, 예외 발생 등)를 할 수 있게 도와준다.Null값을 Wrapper로 한번 감싸서 사용하기 때문에 코드의 안정성을 높이는데 도움을 준다. 📘Optional의 객체 생성 방법 1️⃣ Optional 생성 방법 : Optional.of(value)값이 null이 아님이 보장될 때 사용된다. 아래 코드는 hello라는 값을 가진 Opti..
[ java ] 멀티 스레드 사용법
·
JAVA
📌 스레드와 멀티 스레드❓ 멀티 스레드하나의 프로세스 내에서 여러개의 스레드를 동시에 작업을 수행하는 것을 말한다.❓ 스레드프로세스 내에서 실제로 작업을 수행하는 최소 단위이며, 각 스레드는 독립적인 실행 흐름을 가진다. 📖  멀티 스레드 사용법자바에서 멀티스레드를 사용하는 방법은 2가지가 있다.Thread를 상속받는 방법Runnable 인터페이스를 구현하는 방법  1️⃣ Thread를 상속받는 방법 ⚠️ 자바는 다중상속을 지원하지 않아서, Thread를 상속받으면 다른 클래스를 상속 받을 수 없다.자바에서 스레드를 생성하는 가장 기본적인 방법은, Thread 클래스를 상속받는 것이다.상속받은 Thread 클래스의 run() 메소드를  오버라이드(재정의)한다.start() 메서드가 실제 수행 흐름을 ..
[ java ] 생성자, 생성자 오버로딩
·
JAVA
📌 생성자생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다. 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야한다.생성자는 어떤 값도 리턴하지 않는다.기본생성자는 디폴트로 아무 값(매개변수)도 받지 않는 생성자를 기본생성자라고 한다.사용자 명의 생성자를 하나 만든다면, 기본생성자는 만들어지지 않는다.이때 기본생성자를 사용하려면, 명시적으로 작성하면된다. 기본생성자 public class Car { // 디폴트 생성자가 자동 추가됨}Car c1 = new Car(); 사용자 명의 생성자public class Car{ String model; //생성자 public Car(String model) { this.model = model; // 객체 초..
[ java ] 추상클래스
·
JAVA
📌 추상 클래스추상 클래스 는 'is-a' 관계를 나타내는 상속의 한 형태로 사용되며, 상태(필드)와 행동(메소드)을 모두 포함할 수 있다.구체적인 인스턴스는 생성할 수 없으며, 추상 메서드를 포함할 수 있다.추상 클래스는 상속을 통해서만 사용할 수 있다.추상적 예시?새 → 참새, 비둘기 등동물 → 강아지, 고양이 등추상 클래스 목적 → 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함예기치 않은 인스턴스화나, 오버라이드의 미구현의 걱정이 없다. 📌 추상클래스의 제약1️⃣ 추상클래스는 new에 의한 인스턴스화가 금지 되어 있다아래와 같이 생성할 수 없다. → 인스턴스화 할 수 없다. public static void main(String[] args) { Person p..
[ java ]Constant Pool과 String Constant Pool
·
JAVA
📌 Constant PoolJVM의 Method Area 내부에 위치하고 있다.Constant Pool은 클래스를 컴파일할때 생성된다.컴파일 될때, 클래스 파일내에 포함된 클래스의 구성요소(상수, 문자열, 클래스)를 저장하고 관리한다.Constant Pool에 저장된 값들은 런타임 시점에 JVM에 의해 사용된다. 📌 String Constant Pool❓ String Constant Pool 또는 String Pool이라고 부른다.JVM의 heap 내부에 위치하고 있다.String Constant Pool은 Heap 영역 안에서 관리된다.런타임시점에 사용되는 메모리 영역이다.String test1 = "hello";String test2 = "hello";리터럴 사용시 String Constant ..
[ java ] 객체 상속
·
JAVA
📌 상속이란?✏️ 상속의 흐름설계를 하며 여러가지의 공통된 개념(또는 기능)들을 하나(상위 클래스)로 일반화할 수 있다. → 이것을 추상화 또는 일반화라고 한다.이러한 상위 클래스의 기능을 기반으로 새로운 특성을 추가하거나, 오버라이딩 하는 과정을 할 수 있다 → 이것을 확장이라고 한다—> 이러한 과정을 상속이라고 한다.아래 사진처럼 다중 상속 불가능java는 단일상속이 가능하지만, 다중 상속이 불가능하다.A, B 부모 객체가 있을때 C 자녀는 두개의 부모 객체를 가질 수 없다.하지만 직계 상속은 가능하다A의 부모가 B일때, C는 B를 조상으로 가질 수 있다 = (직계)C는 B의 기능도 사용이 가능하다. 📌 상속의 특징🔥 용어 정리업캐스팅: 부모 타입으로 변환(자동,암묵적)다운캐스팅: 자식 타입으..
[ java ] 메서드의 매개변수로 Object? (Object - toString())
·
JAVA
📌Object자바에서 extends 키워드로 다른 객체를 상속받지않으면, java.lang.object 클래스를 상속한다.결국 object는 모든 클래스의 조상 클래스라고 생각하면된다.코드 예시object는 모든 객체의 조상이라 어떤 타입이든 받을 수 있다.형변환을 통해서 사용한다.instanceof를 통해 실제 객체가 무엇인지 확인해야 한다. (안전성 높임)class Person extends Object{ String name; public void getName(){ System.out.println(name); }}public class Test2 { public static void test(Object object){ //Object 어떤 타입이든 받을 수 ..