본문 바로가기
반응형

🌈 백엔드/객체 지향23

JAVA_객체지향_런타임에 메소드 매개변수 알아내기 [1] 런타임에 메소드 매개변수 조회 (1) Reflection API 프로그램이 컴파일 시점에 특정 타입을 알지 못해도 런타임에 객체를 조작할수 있게 해주는 API 이다 기본적으로 컴파일러는 .class 파일에 공식 매개 변수 이름을 저장하지 않아 매개변수 이름을 런타임에는 사용할수 없다. 하지만 javac -parameters 옵션으로 컴파일을 하면 매개변수 이름을 저장하여 런타입에 매개 변수 이름을 검색할수 있다 JAVA8 , JDK 1.8 이상의 버전일때 사용가능하다 (2) 메소드 , 매개변수 조회 메서드는 동일하게 확인이 되지만 매개변수는 arg0 , arg1로 뜨기 때문에 매개변수 이름으로 뜰수 있도록 변경해보자 pom.xml 파일에서 자바 버전이 1.8 이상이여야한다 Java -version.. 2023. 8. 12.
자바API_ Reflection API_객체생성 Reflection API를 사용하여 객체 만들기 //Hello.java package com.fastcampus.ch2; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class Hello { @RequestMapping("/hello") private void main() { System.out.println("안녕"); } } private으로 되어있기 때문에 Hello 인스턴스 객체를 만들수가 없다 이럴때 Reflection API를 사용하면 인스턴스 객체를 만들수 있다 Reflection API는 클래스 정보.. 2023. 8. 3.
JAVA_객체지향_Object 클래스 [1] Object 클래스 (1) Object 클래스 java.lang.Object 클래스 모든 클래스의 최상위 클래스이다 모든 클래스는 Object 클래스로부터 상속받는다 extends Object라고 되어있지 않더라도 컴파일러를 통해 자동으로 상속받게 적용한다 Object 클래스는 최상위 클래스이기 때문에 모든 클래스 내에서 Object 메서드 중 일부는 재정의해서 사용할 수 있다 (final 선언된 메서드 제외) 컴파일러가 extends Object를 추가함 class Student 라고 선언된것은 class Student extends Object 이렇게 상속된 것이다 (2) java.lang 패키지 내부에 object 클래스가 있다 프로그래밍시 import 하지 않아도 자동으로 imort됨 im.. 2023. 7. 13.
JAVA_객체지향_패키지 package & 클래스 패스 [1] 패키지 (1) 패키지 package 클래스의 묶음 패키지 > 패키지 패키지 > 클래스 또는 인터페이스 (2)패키지 장점 다른 개발자가 개발한 클래스 라이브러리의 이름이 충돌하지 않는다 (2) 패키지 선언 패키지 선언문은 첫번째 문장이여야한다 패키지명은 소문자여야한다 패키지 선언이 안되어있어도 기본적으로 이름없는 패키지가 선언되어있었다 package 패키지명 ; class Test { ... } (4) import 클래스의 패키지를 미리 명시하면 소스코드에 사용되는 클래스 이름에서 패키지명을 생략 할수 있다 컴파일러가 import문을 통해 소스파일에 사용된 클래스의 패키지를 알아내어 모든 클래스 앞에 패키지명을 자동으로 붙인다 *를 붙여 모든 클래스 패키지를 불러온다고 하더라도 실행시 성능상의 차이.. 2023. 7. 10.
JAVA_객체지향_컬렉션 프레임워크 (자료구조) [1] 컬렉션 프레임워크 (1) 컬렉션 프레임워크 프로그램 구현에 필요한 자료구조(Data Structure)를 구현해 놓은 JDK 라이브러리 실제 구현을 직접 할 필요없이 템플릿을 활용하여 개발에 소요되는 시간을 절약하면서 최적화 된 알고리즘을 사용할 수 있음 여러 구현 클래스와 인터페이스의 활용에 대한 이해가 필요함 자바는 java.util 패키지에 제네릭 클래스로 템플릿이 구현되어있다 (2) 컬렉션 Collection 인터페이스 하나의 객체(요소)를 관리하는데 필요한 메서드가 선언된 인터페이스 학년 , 과목 , 이름 ,주소 등 (2-1) 리스트 List 인터페이스 객체를 순서에 따라 저장하고 관리하는데 필요한 메서드가 선언된 인터페이스 차례대로 1번, 2번 등 순서를 매기고 몇번째를 어떻게 할건지에.. 2023. 6. 21.
JAVA_객체지향_제네릭 프로그래밍 [1] 제네릭 프로그래밍 (1) 제네릭 프로그래밍 변수에 적용시킬 클래스 자료형이 여러개이면서 , 그 기능 (메서드)가 동일할경우 각각 클래스 자료형별로 입력하는것보다 실제 사용되는 클래스 자료형이 적용될때만 쉽게 적용될수 있도록 선언한다 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식이다 컬렉션 프레임워크에서 많이 사용되고 있다 (2) 제네릭 자료형 자료형 매개변수 T(type parameter) 이 클래스를 사용하는 시점에 실제 사용할 자료형을 지정하는것 static 변수는 사용할 수 없다 GenericPrinter : 제네릭 자료형 T , E : element, K: key, V : value 등 여러 알파벳을 의미에 따라 사용 가능 (3) 다이아몬드 연산자 //제.. 2023. 6. 19.
JAVA_객체지향_ Class 클래스 [1] Class 클래스 (1) Class 클래스 클래스 파일 , 인터페이스 파일은 컴파일 하면 자동으로 class.파일이 생성된다. Class 클래스는 class.파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드이다 Class.forName("클래스 이름") 메서드로 클래스를 동적으로 로드 함 (2) Class 클래스 목적 reflection 프로그래밍 : Class 클래스를 사용하여 클래스의 정보(생성자, 변수, 메서드)등을 알 수 있고 인스턴스를 생성하고, 메서드를 호출하는 방식의 프로그래밍 로컬 메모리에 객체 없는 경우, 원격 프로그래밍, 객체의 타입을 알 수 없는 경우에 사용 java.lang.reflect 패키지에 있는 클래스를 활용하여 프로그래밍 일반적으로 자료형을 알고 있는 경.. 2023. 6. 19.
JAVA_객체지향_인터페이스 예시 [1] 인터페이스 예시 (1) 인터페이스 & 추상클래스 인터페이스 + 추상클래스 선언 package ch11; public interface Calc { //상수 double PI = 3.14; int ERROR = -9999999; //추상메서드 int add(int num1, int num2); int substract(int num1, int num2); int times(int num1, int num2); int divide(int num1, int num2); } 하위 클래스에 메서드 재정의 package ch11; public abstract class Calculator implements Calc { @Override public int add(int num1, int num2) { re.. 2023. 6. 19.
JAVA_객체지향_인터페이스 [1] 인터페이스 (1) 인터페이스 interface 추상화 정도가 높은 추상클래스의 윗버전 같은 것이다 인터페이스는 기본설계도, 추상클래스는 미완성 설계도 이다 인터페이스에 메서드를 추가하면 , 인터페이스를 구현한 모든 클래스에 각각 메서드를 구현해야하는 대공사가 필요하다 인터페이스는 Object클래스가 최상위 클래스가 아니다. 최고 상위클래스는 없다 (2) 인터페이스 구성 (2-1) 상수 (2-2) 추상메서드 (2-3) default 메서드 추상메서드의 기본구현을 제공한다. 메서드를 추가해도 인터페이스를 구현한 모든 클래스에 메서드를 추가하지 않아도된다 public default 기본 인터페이스를 구현한 클래스에서 디폴트 메서드는 오버라이딩한다 상위클래스의 메서드와 이름이 똑같다면 디폴트 메서드는 .. 2023. 6. 18.
JAVA_객체지향_추상클래스 & 가상메서드 [1] 추상 메서드 & 추상클래스 (1) 추상메서드 abstract 추상메서드는 선언부만 작성하고 구현부는 작성하지 않는다 상속받는 클래스에 overriding 으로 구현부를 작성한다 /* 어떤기능을 수행할건지 기재한다 */ abstract void 메서드(); abstract void 메서드(매개변수); (2) 추상클래스 abstract 추상메서드가 포함된 클래스를 말한다 abstract 예약어를 사용한다 인스턴스 객체를 생성할수 없다 상속계층도를 따라 내려갈수록 구체화 정도가 심해지고 , 올라갈수록 공통요소만 남게된다 // 추상클래스 abstract class Car { abstract void drive(); abstract void Engine(Sring gear); } // 하위 클래스의 추상메.. 2023. 6. 18.
반응형