java 14

인터페이스 vs 추상클래스

(오랜만에 글을 쓴다. 최근에는 노션에 익숙해지느라 티스토리를 좀 간과했다😥)  인터페이스와 추상클래스는 자바로 개발을 하면 한번씩은 들어본 단어일 것이다.둘의 느낌이 비슷해서 이번에 공부하면서 차이점을 알아보았다. 인터페이스와 추상클래스의 차이인터페이스 : implements(구현)에 초점. 인터페이스에 정의된 메소드들을 각 클래스의 목적에 맞게 기능을 구현하기 위해추상클래스 : extends(상속)에 초점. 추상 클래스의 기능을 하위 클래스로 확장하기 위해추상클래스중복 멤버 통합. 인터페이스는 static final 상수만 정의할 수 있는 차이가 있다.클래스끼리 명확한 계층 구조가 필요할 때 사용 → 클래스와 의미있는 연관관계 구축다형성 : 미리 논리적인 클래스 상속 구조를 만들어 놓고 사용인터페이..

java 2024.05.16

상속과 메모리 구조

Guitar 클래스가 Instrument 클래스를 상속받는 상황을 가정해보자. public class Instrument { public void play() { System.out.println("악기를 연주합니다."); } } public class Guitar extends Instrument { @Override public void play() { System.out.println("기타를 연주합니다!"); } } 그리고 Guitar 객체를 생성한다. public class InheritanceMain { public static void main(String[] args) { Guitar guitar = new Guitar(); guitar.play(); } } 이 때 Guitar 객체가 참조..

java 2023.12.21

자바 main 메소드는 왜 static일까?

자바의 main 메소드는 static이 붙은 정적 메소드이다. public static void main(String[] args) {...} 왜 main 메소드에 static이 붙었을까? ⛏ static 메소드 static 메소드는 정적 메소드, 클래스 메소드라고도 하는데 객체 생성 없이 클래스로부터 바로 호출이 가능하다. 유틸리티성 메소드에 자주 사용된다. static 메소드는 메소드 영역에 존재하며 클래스로 접근하여 사용할 수 있다. public class StaticMethodMain { public static void main(String[] args) { int a = 30; // 클래스로 바로 접근 int result = StaticMethod.calculate(a); System.out...

java 2023.12.19

자바 메모리 구조

⛏ JVM Java Virtual Machine의 약자로, 해석하면 자바 가상 머신이다. (가상 머신 : 프로그램 실행을 위해 물리적 머신과 유사한 머신을 sw로 구현한 것) 즉, JVM은 자바를 실행하기 위한 가상 머신으로 자바의 바이트 코드를 해석하고 실행한다. 특징 1. 운영체제 종류와 상관없이 JVM만 설치하면 자바 파일 실행이 가능하다. 2. 크게 4가지 영역으로 구성되어있다. 1️⃣ Garbage Collector(GC) 힙 영역에 더이상 참조되지 않는 객체들을 제거한다. 자동으로 실행된다. 2️⃣ Class Loader 런타임 시점에 컴파일된 바이트 코드(.class)들을 메모리 할당을 받은 Runtime Data Area로 적재한다. 3️⃣ Execution Engine Class Load..

java 2023.12.16

final 키워드(변수, 상수)

⛏ final final 키워드는 특정 변수 및 클래스, 메소드 등에 값을 최초 할당 후 변경되지 않게 하는 제약이다. 기본형 변수, 참조형 변수에 모두 사용할 수 있다. 특징 1. final이 붙은 변수는 값 변경이 불가하다. 지역 변수, 매개 변수 public class FinalBasic { public static void main(String[] args) { final int data = 10; // 값 할당 후 변경 불가 // data = 20; changeFinal(10); System.out.println("data : " + data); } static public void changeFinal(final int data) { // final 이 붙은 매개변수도 변경 불가능 // dat..

java 2023.12.14

생성자

⛏ 생성자 생성자는 객체 생성 직후 객체에 초기값을 할당하는 메소드이다. 특징 1. 생성자 이름은 클래스 이름과 동일해야 한다. 2. 생성자는 반환 타입을 가지지 않는다. class Member { String name; int age; // 생성자(constructor) Member(String name, int age) { this.name = name; this.age = age; } } 생성자는 인스턴스를 생성한 후 즉시 호출된다. 즉, new 키워드를 통해 인스턴스를 생성한 후 즉시 생성자가 호출되어 객체에 초기값을 할당한다. Member member = new Member("dragon", 20); 왜 쓰나? 객체에 값을 넣어주는 메소드를 만드는 대신 생성자를 사용하는 이유가 무엇일까? 1. ..

java 2023.12.12

error-Your build is currently configured to use Java 17.0.7 and Gradle 6.8.

상황 : intellij에서 JDK 17 version 사용하여 java 프로젝트 생성 시 발생한 에러. Settings와 Project Structure에서 모두 JDK 17로 세팅해둔 상태 해결 : gradle-wrapper.properites의 distributionUrl의 gradle 버전 7.6으로 변경 원래는 gradle 6.8이었던 것을 7.6으로 변경 빌드 성공! 참고자료 https://docs.gradle.org/7.3/release-notes.html#java17 Gradle 7.3 Release Notes Gradle Release Notes Version 7.3 The Gradle team is excited to announce Gradle 7.3. This release intr..

java 2023.12.05

해시(Hash)

🎈 Hash 💡 key : value로 이루어진 자료구조 모든 데이터 타입으로 접근이 가능하다. → 배열보다 편리하다. 자바에서는 주로 HashMap 자료구조를 사용한다. Map 인터페이스를 구현한 Map Collections 중 하나로 Map 인터페이스를 상속하고 있어서 Map이 성질을 그대로 가지고 있다. Key는 중복을 허용하지 않지만 Value는 중복이 허용된다. import java.util.HashMap; // Key가 String이고 Value가 Integer 타입의 Entry를 가지는 HashMap 선언 HashMap map = new HashMap(); // 삽입 --> map.put(Key값, Value값) map.put("apple", 1); map.put("melon", 2); //..

java 2023.11.26

동일성 vs 동등성

본 게시물은 프로그래머스 FOO님의 실무 자바 개발을 위한 OOP와 핵심 디자인 패턴을 듣고 작성된 게시물입니다. 📣 동일성과 동등성 동일성 : 비교 대상이 실제로 똑같은 대상이어야 함(== 연산자 사용) 동등성 : 비교 대상이 같은 값이라고 우리가 정의한 것(equals() 오버라이딩) 동일한 인스턴스는 동등하다. public class SomeObject { private int intField; private String stringField; public SomeObject(int intField, String stringField) { this.intField = intField; this.stringField = stringField; } public int getIntField() { ret..

java 2023.08.17

stream API + Optional

본 게시물은 프로그래머스 FOO님의 실무 자바 개발을 위한 OOP와 핵심 디자인 패턴을 듣고 작성된 게시물입니다. stream API와 Optional을 같이 쓸 수 있다. list.stream().filter(user -> user.sameId(inputId)) .findAny() // optional 반환 메소드 .ifPresentOrElse( user -> { throw new RuntimeException(inputId + " 이미 존재하는 아이디입니다."); }, () ->{ System.out.println(inputId + " 사용 가능한 아이디입니다."); }); findAny() 메소드가 optional을 반환하는 메소드이다.

java 2023.07.15