본문 바로가기

Programming/Java21

다형성 Polymorphism 다형성 Polymorphism 다형성 Polymorphism: 프로그램 언어 각 요소(상수, 변수, 식, 객체, 메서드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다(위키피디아, [다형성]). 또는 여러 형태를 받아들일 수 있는 성질, 상황에 따라 의미를 다르게 부여할 수 있는 특성 등으로 정의하기도 한다. 다형성을 활용하면 기능을 확장하거나, 객체를 변경해야 할 때 타입 변경 없이 객체 주입만으로 수정이 일어날 수 있다. 또한 상속을 사용하여 중복 코드까지 제거할 수 있어 객체 지향 설계와 가까워질 수 있다. 다형성 구현에는 다양한 방법이 있을 수 있지만, 오버로딩, 오버라이딩, 함수형 인터페이스가 대표적이다. - Tecoble, [다형성] 페이지에서 오버로딩 Overloadi.. 2023. 11. 28.
상속 ~ Is a ... / Kind of ~ 관계 ( ~는 ...다/ ...는 ~ 종류이다.) 상속 = 일반화 기능 + 확장 기능 상속은 가장 강한 결합도를 가진다. 반드시 써야할 때만 사용하고 가급적 사용하지 않는 것이 좋다. 결합도를 낮추고 응집도를 높여야 활용성이 높아지므로. 아무것도 상속하지 않으면 자동으로 java.lang.Obeject를 상속 받는다. [접근제한자] [ abstract | final ] class 클래스명 extends 부모 클래스명 { ... } Question: 참조 변수가 자식 클래스의 객체를 참조하고 있는 경우 어떤 일이 발생할까? Car car = new Bus(); 와 같은 경우는 어떤일이 벌어질까? 객체는 Bus가 생성되지만 그 객체를 가르키는 car변수는 Car로 생.. 2023. 11. 28.
패키지 | 토막글 패키지 경로 오픈소스의 경우 패키지가 없으면 클래스에 대한 혼동이 오는 경우가 많았음. 도메인을 거꾸로 적어 명시하는 것으로 패키지를 구분하게 됨. 패키지 경로는 항상 클래스 가장 위에 작성한다. 패키지가 정의된 클래스 컴파일하기 javac -d {경로명} *.java -d 옵션을 사용하여 컴파일한다. 경로명에 . 를 입력하면 현재 디렉터리에 컴파일 결과가 생성되며, 패키지를 컴파일한 경우 해당 디렉터리가 모조리 생성된다. java com.example.util.Calculator JVM에 패키지명을 위와 같이 실행해주면, CLASSPATH에서 com > exapmle > util 폴더로 내려가 Calculator 클래스를 찾는다. 물론 IDE를 쓰면 자동으로 다 만들어준다. import import는 .. 2023. 11. 28.
자바에서의 객체 관리 2: 각종 변수들의 생성과 사용 클래스정보의 등록 Java Heap은 JVM이 관리하는 메모리, native memory는 운영체제에서 관리하는 메모리이다. 이 메모리에는 처음 프로그램이 실행될 때 클래스 정보들이 올라가게 된다. 소스 코드, 클래스 파일 자체는 정적이다. HDD나 SSD의 경우 RAM보다 속도가 느리기때문에 매번 보조기억장치에서 이를 읽어들이는 것은 성능을 저하시킨다. 따라서 클래스 정보는 처음 사용될 때 메모리에 그 정보를 올리고 필요할 때마다 가져오는 것이다. → 이미 클래스에 대한 정보를 PERM 혹은 Metaspace에 올려두고, 객체가 생성될 때마다 사용하는 것이다. Static 정보의 생성 Java 7까지는 non-heap영역, 8 이상부터는 heap에 저장한다. 클래스가 로딩될 때 한 번 메모리에 올라가 .. 2023. 11. 27.
Main 메서드보다 먼저 실행되는 static 블록 | 토막글 static block은 static 변수에 대한 초기화를 진행할 수 있다: public class hello { static int a; static { a = 500; System.out.println(a); } public static void main(String[] args) { System.out.println("Hello"); } } 클래스 필드와 클래스 메서드는 실행이 가능하도록 올라가고, static 블록의 코드가 실행되어 그 값을 초기화한다. 그 다음 JVM은 메인 메서드를 찾아 실행한다: static하므로 객체를 생성하지 않고도 실행할 수 있다. 따라서: a값을 출력 후, "Hello" 2023. 11. 27.
Static 메서드에서 인스턴스 필드를 사용할 수 없는 이유는? | 토막글 클래스 메서드(static method)가 실행되는 시점에는 인스턴스 필드가 메모리에 없으므로 사용할 수 없다 → 컴파일 오류 static 메서드 / static 필드 = 클래스 메서드 / 클래스 필드 비 static 메서드 / 비 static 필드 = 인스턴스 메서드 / 인스턴스 필드 2023. 11. 24.