상속과 다형성, Override는 자바의 객체지향에 있어서 중요한 개념들이다. 어느정도 개념은 알고 있지만, OS관점? 메모리 구조 관점에서 보았을 때, 어떤식으로 작동이 되는 지 원리를 알고 싶었고, 공부하게 되었다. 상속 상속관계인 클래스에서는 자식 클래스가 부모 클래스의 변수와 메서드를 사용할 수 있다. 이게 어떻게 가능한걸까? JVM 메모리 구조에는 Runtime Data Area가 있다. 프로그램 수행을 위해 OS로부터 별도로 할당받은 메모리 공간이며, PC 레지스터, JVM 스택, Native 메서드 스택, 메서드 영역, 힙으로 공간이 나뉘어져있다. 자세한 내용은 아래 글을 참고하면 된다. [ Java ] JVM란? 자바의 실행 원리 알아보기 1. JVM이란? JVM은 자바 가상 머신으로 Ja..
애노테이션? 애노테이션(annotation)은 사전적 의미로는 주석을 의미한다. 그렇지만 우리가 원래 알던 일반적인 주석 //이나 /**/와는 다르다. 일반적인 주석과 다르게 애노테이션은 코드를 작성할 수 있다. 즉, 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애노테이션이다. 애노테이션은 주석이기 때문에 다이나믹하게 실행되는 코드는 들어가지 않는다. 즉, 런타임 중에 알아내야하는 값은 못들어간다. 컴파일러 수준에서 해석이 되거나, 완전히 정적이어야한다. 동적으로 런타임중에 바뀌어야하는 것들은 애노테이션에 사용할 수 없다. @RestController public HelloController{ private static final String hello = "..
enum(열거형)이란, 서로 관련된 상수를 편하게 선언하기 위한 것으로 상수를 여러개 정의해야 할 때 사용한다. 즉, 서로 연관된 상수들의 집합이다. 수많은 언어는 사용자들이 새로운 열거형을 정의할 수 있게 하고 있다. C언어에서는 enum 클래스의 역할은 단순히 상수들의 집합으로 사용되었지만, 자바에서는 타입까지 비교가 가능하다. 1. enum 정의하는 방법 📝 enum 은 {} 안에 상수의 이름을 나열하기만 하면 된다. //enum 열거형 이름 { 상수명1, 상수명2, 상수명3 ... 상수명 n } public class EnumExample { enum Language { ENGLISH, KOREAN, CHINESE, JAPANESE } public static void main(String[] a..
1. Thread 클래스와 Runnable 인터페이스 프로세스(Process) 프로세스는 단순히 실행 중인 프로그램을 말한다. 프로그램을 실행하면 운영체제에 의해 메모리 공간을 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원과 쓰레드로 구성되어 있다. 쓰레드(Thread) 쓰레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하는 주체를 말한다. 모든 프로세스는 최소한 하나 이상의 쓰레드가 존재한다. 쓰레드가 하나면 싱글쓰레드 프로세스, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스(multi-threaded process)라고 한다. 멀티 태스킹(multi-tasking, 다중작업) 여러 개의 프로세스가 동시에 실행될 수 있는 것을 말하며, 대부분..
자바 프로그램을 사용하다가 프로그램이 비정상적으로 종료될 때가 있다. 이런 원인을 에러(Error)라고 한다. 에러는 컴파일 에러와 런타임 에러로 구분할 수 있다. 컴파일 에러는 컴파일 과정에서 발생하는 에러, 런타임 에러는 실행(런타임) 과정에서 발생하는 에러를 말한다. 컴파일 에러는 기본적으로 자바 컴파일러가 문법 검사를 통해 에러를 잡아내주기 때문에 , 그 에러를 수정하면 프로그램을 실행할 수 있다. 런타임 에러는 컴파일 시에 에러가 발생하지 않더라도 실행(런타임) 과정에서 에러가 발생하는 것을 말한다. 런타임 에러를 막기 위해서는 프로그램 실행 과정에서 일어날 수 있는 에러의 경우의 수를 모두 고려해 방지해야 한다. 자바에서 런타임 에러를 에러(Error)와 예외(Exception) 두가지로 구분..
인터페이스란? 인터페이스는 객체와 객체 사이에서 상호작용의 매개로 쓰이는데, 일종의 추상클래스이다. 그러나 추상클래스보다 추상화 정도가 높아서 일반 메소드나 멤버변수를 구성원으로 가질 수 없다. 추상 메소드와 상수만 구성원으로 가질 수 있다. ( ⚠ 자바 8 이후부터는 default 일반 메소드 와 static 메소드를 구현할 수 있다.) 1. 인터페이스 정의 인터페이스의 선언은 예약어로 class가 아닌 interface 키워드를 사용한다. 접근 제어자는 public 이나 default를 사용한다. public interface 인터페이스명 { //1) 변수(상수) 타입 상수명 = 값; //2) 추상 메소드 타입 메소드명(매개변수, ...); // 디폴트 메소드 default 타입 메소드명(매개변수, ..
1. package 키워드 패키지는 사용자가 만든 클래스나 인터페이스 등을 모은 단위를 말한다. 모든 클래스는 정의된 클래스 이름과 패키지 이름이 있다. 이 둘을 합쳐야 완전한 한 클래스를 표현한다고 하며 이것을 FQCN(Fully Qualified Class) 라고 한다. 예를 들어 String 클래스의 패키지는 java.lang 이고 FQCN은 java.lang.String이 된다. 쉽게 말하면, 패키지는 클래스를 구분짓는 폴더 개념이다. 그래서 패키지 이름과 위치한 폴더의 이름이 같아야 한다. 패키지 이름은 모두 소문자여야 하고, 자바의 예약어를 사용하면 안된다. 패키지명은 클래스의 파일 상단에 작성한다. 아래 클래스의 FQCN은 com.pudding.study.ExmapleClass 이 된다. p..
1. 상속이란? 상속은 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것을 말한다. 여기서 기존의 클래스는 부모 클래스(=상위 클래스 = 슈퍼 클래스)이고, 새로운 클래스는 자식 클래스(=하위 클래스 = 서브 클래스)라고 한다. 자식 클래스는 부모 클래스의 변수와 메서드를 재사용 할 수 있다. 상속을 통해서 새로운 클래스를 작성하면 코드를 공통적으로 관리할 수 있어서 코드를 추가하거나 변경하는 것에 매우 용이하다. 이는 객체지향 프로그래밍(OOP)의 주요 개념이다. 자바에서 상속을 구현하는 방법은 다음과 같다. 새로운 클래스의 이름 뒤에 키워드 'extends'와 상속받고자 하는 클래스의 이름을 적으면 된다. //class 자식클래스명 extens 부모클래스명 { } class Child exten..