본문 바로가기

개발/Java23

추상클래스와 인터페이스 추상클래스와 인터페이스 다형성 보장 부모가 명령을 내리면 자식이 반드시 동작(반응)을 해야한다. 정보 은닉, Override(재정의), Upcasting, 동적 바인딩의 다형성 전제조건 4가지를 필수로 만족해야한다. 반드시 재정의가 되어야 한다. 부모 클래스가 추상적으로 설정하면 무조건 자식 클래스에서 재정의를 해야한다. 재정의를 하면 다형성을 보장한다. 부모 클래스를 추상적으로 만든다. 추상 클래스(불완전한 클래스) 메서드의 구현부가 없는 메서드 반드시 자식이 완전하게 재정의를 통해 해야한다. // 추상클래스(불완전한 클래스) public abstract class Animal{ // 추상 메서드(불완전한 메서드) : 메서드의 구현부가 없다. public abstract void eat(); } pub.. 2024. 1. 29.
다형성 다형성 다형성이란? 다형성 상위클래스가 동일한 메시지로 하위 클래스를 서로 다르게 동작 시키는 객체지향 이론 Upcasting 사용 public class PolyTest { public static void main(String[] args) { // Upcasting으로 객체를 생성 // 상속관계, 재정의(Override), 동적바인딩 // [다형성(message polymorphism)] // 상위클래스가 동일한 메시지로 하위클래스를 서로다르게 동작시키는 객체지향 원리 Animal ani = new Dog(); ani.eat(); //실행시점에서 사용될(호출될)메서드가 결정되는 바인딩(동적바인딩) ani = new Cat(); ani.eat(); // Downcasting ((Cat)ani).nig.. 2024. 1. 29.
객체 형변환 객체 형변환(Object Casting) 부모 자식 간의 형 변환 부모와 자식 간에 형 변환이 된다 부모는 여러 명의 자식을 가리킬 수 있다. 부모를 알면 자식들을 관리 하기 쉽다. Upcasting 자동 형변환 Downcasting 상위 클래스의 타입을 하위 클래스의 타입으로 바꾸는 행위 강제 형변환 업캐스팅이 되어야 다운캐스팅이 가능하다. 부모가 자식 타입으로 형변환 public class OverrideTest { public static void main(String[] args) { // Upcasting : Dog의 소스코드를 주지 않고 Dog의 클래스와 상속 관계인 것만 알면 Animal 부모 클래스로 Dog 자식 클래스를 사용하기 위해서 사용 Animal ani = new Dog(); //.. 2024. 1. 28.
상속 객체 지향 프로그래밍 설계 하기 상속 수평적 구조와 수직적 구조의 설계 방법 수평적 구조로 설계 한다면? → 각 클래스마다 DTO, VO를 만들어야한다. 객체를 설계하다 보면 비슷한 클래스의 경우 중복적인 요소가 발생한다. 객체를 수평적인 구조로 설계하면 단점 코드의 중복이 발생 새로운 요구사항 발생시 반영이 어렵다(유지보수가 어렵다) 확장성이 떨어진다. 수직적 구조로 설계한다면? 수직적 구조 = 계층화 = 상속 = 클래스와 클래스의 관계 설계 부모가 확장(상속)(extends) 시켜서 자식이 부모의 정보를 사용가능 하기 때문에 코드의 중복부분을 최소화 할 수 있다. 새로운 요구사항 발생 시 부모 클래스만 수정하면 되기 때문에 유지 보수가 쉽다. 클래스를 계층화 해서 사용할 때의 장점 클래스를 계층화 하.. 2024. 1. 28.
객체 생성과 static 과의 관계 객체 생성과 static 과의 관계 객체 생성을 못하게 막기 위해서 클래스의 생성자를 private으로 설정할 수 있다. new를 사용하여 객체 생성 불가 자주 사용하는 클래스들은 객체를 생성하지 않고(private으로 선언) 클래스에 직접 접근해서 메서드 사용 하기 위해서 객체 생성을 막는다. public class AllStatic { private AllStatic(){ } public static int hap(int a, int b){ int v=a+b; return v; } public static int max(int a, int b){ return a>b ? a : b; } public static int min(int a, int b){ return a 2024. 1. 28.
JVM이 사용하는 메모리 영역 JVM이 사용하는 메모리 영역 JVM의 메모리 모델(Runtime Data Area) → Thread Method Area 메서드의 바이트 코드(기계어 코드)가 할당되는 공간 static-zone과 none-static-zone으로 나누어 진다. static 멤버들은 static-zone에 할당된다. Heap Area Generation 객체가 생성되는 메모리 공간(new 연산자) GC(Garbage Collector)에 의해서 메모리가 수집된다. Garbage Collection(가비지 컬렉션)이란? 💡 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 J.. 2024. 1. 28.
Static static 메인(시작) 클래스는 왜 객체 생성(new) 없이 실행이 될까? 메인 클래스가 동작 되는 방식을 이해해야한다. JVM이 실행할 클래스를 찾는다 static 키워드가 붙어있는 멤버들을 정해진 메모리(static-zone) 위치에 한 번 자동으로 로딩 한다. (Method Area에 static-zone과 none-static-zone으로 구성되어있다.) static 멤버들은 클래스를 사용하는 시점에서 딱 한번 메모리에 로딩된다는 점이 중요하다. 여기서는 main() 메서드가 static이기 때문에 메모리에 자동으로 로딩한다. JVM이 static-zone 에서 main() 메서드를 호출한다. 호출된 메서드를 Call Stack Frame Area(Stack Area)에 push(기계어 코드를 .. 2024. 1. 28.
배열과 클래스의 관계 배열과 클래스의 관계 동일한 구조와 이질적인 구조 배열은 동일한 데이터(한가지 타입)로 이루어져 있고 클래스는 이질적인 데이터(다른 타입)로 구성되어 있다. public class StudentTest { public static void main(String[] args) { // Q. 정수 6개를 저장할 배열을 생성하세요. int[] arr = new int[6]; arr[0]=10; arr[1]=30; arr[2]=67; arr[3]=98; arr[4]=55; arr[5]=32; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } // Q. 잘 설계된 학생(Student) 객체를 설계하고 데이터를 저장 한 후 출력하세요. Stu.. 2024. 1. 28.