Category: Java

메모리 구조

메모리는 Method Area - Call Stack - Heap 영역으로 구분된다. 각각의 영역이 어떤 역할을 수행하는지 알아보자. Method Area 클래스 파일의 바이트 코드가 할당되는 영역이다. class 파일의 자바 애플리케이션 코드가 JVM에 의해 기계어로 변환되어 실행이 되는데, 이 때 변환된 기계어가 바이트 코드이다. static

JAVA - 내부클래스(innerClass또는 nestedClass)

클래스 안에 클래스, 즉 내부 클래스를 생성할 수 있다. 중첩되는 객체이므로 nested class라고도 하고, 그냥 inner class라고도 하는 것 같다. 내부 클래스는 크게 4가지로 분류된다. 일반 내부 클래스, 내부 static 클래스, 내부 지역 중첩 클래스, 익명 중첩 클래스가 있다. 일반 내부 클래스 내부 static 클래스 내

인텔리J에서 Gradle 프로젝트 인식안될때

인텔리J로 gradle 프로젝트를 진행하려는데, 자꾸 같은 에러가 발생했다. 분명 gradle 설정(build.gradle)에서 jpa 관련 dependency를 주석처리하고, 웹서버 실행을 했는데 아래의 에러 메세지를 출력하며 웹 서버 실행을 중단하는 것이다. 1Failed to configure a DataSource: 'url

Java - 인터페이스(Interface)

객체지향의 주요 개념중 하나이다. 인터페이스는 추상 클래스의 일종이지만 추상화 클래스보다 추상화 정도가 높다. 추상화 클래스와 달리 인터페이스는 아예 몸통을 가지지 않기 때문이다. 오직 추상 메서드와 상수만을 가질 수 있다고 한다. ToC 인터페이스 작성규칙 인터페이스 다중상속 default 메서드와 static 메서드 추상 클래스와 인터페이스간 비교

JAVA - 추상 클래스/추상 메서드

추상 클래스란, 미완성 클래스를 의미한다. 일단 선언은 했지만, 완성되지 않아서 오버라이딩을 통해 기능을 작성해야 한다. 아래 코드를 통해 확인해보자. 123456789package devandy.java.abstraction;public abstract class Bird { public abstract void sing(); pu

JAVA - 클래스의 형변환

클래스는 형변환이 가능하다고 하다. 보다 정확히 이야기하자면, 상속관계에서 수퍼 클래스를 서브 클래스처럼 사용할 수 있다는 이야기이다. 원래 서브 클래스는 수퍼 클래스처럼 사용할 수있다. 서브 클래스에서 선언하지 않아도 수퍼 클래스에 선언 또는 호출되어 있다면 해당 기능(메서드)를 사용할 수 있기 때문이다. 그래서 1public class Sub ex

Java - 상속 (Extends)

상속은 부모 클래스를 상속받은 자식 클래스가 기능을 물려받는 걸 의미한다. 아래 예제 코드를 보자. Bus 클래스는 아무것도 선언되지 않았지만, Car 클래스를 상속받고 있으며, passenger 클래스에서 Bus 클래스의 인스턴스를 생성해서 Car 클래스의 메서드 run()을 실행하는 코드이다. Car.java 1234567package devand

Java - 오버로딩과 오버라이딩

상속을 배우면서 빠질 수 없는 개념들, 오버로딩(overloading)과 오버라이딩(overriding)에 대한 부분이다. 간단히 정의하면 아래와 같다. 개념 설명 Overloading오버로딩 오버로딩은 수퍼 클래스와 같은 이름의 메서드를 서브 클래스에서 여러개 만들어서 사용할 때 쓰는 개념

JAVA - 생성자

생성자란 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다. 인스턴스를 생성하기 위해 객체를 초기화하는 메서드가 필요한데, 생성자가 이 역할을 한다. 생성자는 기본적으로 메서드와 동일한 역할을 하는데, 메서드와 달리 아래의 두가지 조건을 필요로 한다. 생성자의 이름은 클래스의 이름과 같아야 한다. 리턴값이 없어야 한다. (리턴 타입은 생략한다.

Scope와 Static

위의 이미지처럼 Car 라는 객체로부터 인스턴스를 2개를 생성해서 Car 객체의 변수 wheelCount를 사용하려고 한다. 먼저 이렇게 작성해보았다. taxi, suv라는 이름으로 각각 인스턴스를 생성했고, 각각 다른 값을 wheelCount에 입력해보았다. 출력결과는 예상대로 출력이 되었다. 이번엔 좀 다르게 해보았다. Car 객체의 wheel