일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 최대최소값
- Spring#Springboot#Xml#Mapper#Interface#SQL#{}###$#MyBatis#yaml#Annotation#Private#public#Insert#Update#select#delete#쿼리#메소드#매개변수
- SQL #SQLD # DDL #DML# DCL# TCL # 트랜잭션 #개념 # 데이터베이스
- JAVA #JAVASE#JAVAEE ##Thread #ThreadLocal #primitive type # reference type #바이트 코드 #동적로딩 #쓰레드 #기본데이터타입 #참조 데이터 타입 #클래스 로더 # 심볼릭레퍼런스 #자바 언어 #컴파일언어#스크립트언
- 스프링#자바#클라이언트#응답#요청 #파라미터#포스트맨 #HTTP#Postman#RequestBody#ResponseBody#Controller#Dto#package#Slf4j#JSON#Spring#SpringBoot#Data#데이터#프로토콜#GET#POST#PUT#DELETE#Code#Header#Body#Lombok
- SQL #SQLD # 제약조건 # 기본키 #외래키 # FK #PK #NOTNULL
- java # 홀수 #약수#소수 #합 # 판별 #멋사
- #리팩토링 #
- java #do-while문 #while # 멋사 # 개념정리
- 우테코 # 우아한테크코스 # 백엔드# 회고록 # 우테코 6기 # 숫자야구게임 # 게임 #프로젝트
- Java # DI # Static #Method #자바 # 의존성 주입 # 스태틱메소드 # This #오버로딩 #오버라이딩 #추상클래스
- Map #HashMap #LinkedList# Array# Stack #Queue#링크드맵 #트리맵 #자바 개념 #자바 JAVA
- Spring # IOC # Bean # Service # Component# Repository # Controller # RestController # Framework # 컨테이너 #의존성 # Json#@#비즈니스로직 # 컴포넌트 #어노테이션 #클래스 # 예시
- Java #알고리즘 # 선택정렬 # 삽입정렬 # Insert Sort # Selection Sort #정렬
- MVC #Model #Controller#View #Model1 #Model2 #MVC패턴#컨트롤러#뷰#모델#모델1#모델2
- #Java # private #constructor #Getter#Setter #List #ArrayList #LinkedList #생성자 #Generic #Collection #컬렉션 #제네릭
- #시간복잡도 #o(n2)의 시간복잡도
- Return
- Spring #CRUD#DELETE#UPDATE#CREATE#READ#DB#API#JAVA#스프링#삭제#생성#갱신#삭제#JSON
- 우테코#우아한테크코스#6기 #우테코6기#자소서#회고#후기#자소서과정
- Spring# API # Bean#App#Controller#Configuration#Component#AllArgsConstructor#Service#RestController#HTTP#ResponseBody#JSON#스프링#웹#애플리케이션#프레임워크#어노테이션#컨테이너#IoC컨테이너 #IoC#의존성
- java #멋사 # 소인수분해
- java #메소드 # main메소드 #
- OOP #객체지향프로그램 #절차지향 프로그래밍#함수형 프로그래밍# 객체지향프로그래밍 #SOLID # CallByValue #CallByReference#String#String Buffer#String Builder
- 토스 #토스개발자챌린지# next#코딩테스트 #토스 코테 #2024#온라인 코테#toss
- JAVA #JVM #GC #자바 #가비지컬렉터 # 제네릭 #Generic # Static #스태틱 # 접근제어자 #인터페이스 #추상클래스 #OOP # 객체지향 #객체지향적 프로그래밍 언어 # final
- Spring # Optional #Null # Read-all # 정적메소드# 클래스 #JPA#Service#Controller #App # 웹 # 애플리케이션 # Dto#객체 #팩토리#스프링부트#프레임워크
- SQLD#SQL#식별자#비식별자#데이터모델링 #개념 #정의 #엔터티#속성 #도메인 #관계 스키마 #ERD
- Spring#Skeleton#Service#controller#CRUD#DTO#ID#Read-all#Update#Delete#Create#JPA#class#interface#Repository#DB#의존성 주입#인터페이스#클래스#RequestMapping#method#메소드#요청#응답
- Today
- Total
말하는 햄zzi
스태틱(static)메소드/ 리팩토링/오버로딩/This / 추상클래스/DI 본문
스태틱 메소드란?
-인스턴스를 생성하지 않고도 main() 메소드에서 바로 메소드를 호출가능
▷ static을 붙이면 JVM이 실행 될때 인스턴스를 생성하므로 new를 이용해
인스턴스를 생성하지 않고도 main() 메소드에서 바로 메소드를 호출 할 수 있다.
스태틱 메소드 선언 방법
-Return type(리턴타입)앞에 static 을 붙이면 static method가 된다
public class 클래스이름() {
접근제어자 static 리턴타입 메소드이름() {
// 메소드의 기능
}
}
예제)
public class Calculator {
public static void printMinus(int num1, int num2) {
System.out.println(num1 - num2);
}
public static void main(String[] args) {
printMinus(10, 20);
}
}
결과 : -10
다른 클래스에서 스태틱 메소드 호출
-스태틱 메소드는 접근제어자를 public으로 해놓았다면 다른 클래스에서도 바로 호출해서 쓸 수 있음
리팩토링
-코드를 효율적으로 만드는 작업으로 가장 처음에 하는 리팩토링은 주로 메소드로 분리하는 것
▷ 가독성, 확장성, 유지보수성을 향상(주로 코드 중복 제거 및 비효율적인 부분을 개선)
예제)
→ 리팩토링 전
import java.util.Arrays;
public class SeparateIntoStaticMethod {
public static void main(String[] args) {
int[][] arr = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
};
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
arr[0][0] = 0;
arr[1][1] = 0;
arr[2][2] = 0;
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
}
}
→ 리팩토링 후
import java.util.Arrays;
public class SeparateIntoMethod {
public static void printArray(int[][] arr) {
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
System.out.println("--------------------");
}
public static void main(String[] args) {
int[][] arr = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}};
printArray(arr);
arr[0][0] = 0;
arr[0][1] = 0;
arr[0][2] = 0;
printArray(arr);
arr[1][1] = 0;
printArray(arr);
}
}//printArray’라는 별도의 메서드 생성하여 배열출력 부분을 분리
결과:
[10, 20, 30]
[40, 50, 60]
[70, 80, 90]
-----------------------
[0, 0, 0]
[40, 50, 60]
[70, 80, 90]
------------------------
[0, 0, 0]
[40, 0, 60]
[70, 80, 90]
오버로딩
-한 클래스(Class)내에서 같은 이름의 메소드(Method)를 여러개 정의 하는 것
오버로딩은 매개변수의 개수, 타입, 순서가 서로 다른 메서드를 정의하여 같은 이름으로 호출할 수 있게 해준다.
오버로딩 특징
- 메서드 이름은 동일
- 매개변수의 개수, 타입, 순서가 서로 달라야한다
- 반환 타입은 오버로딩과 무관
예제)
public class Rectangle {
private int width;
private int height;
// 기본 생성자
public Rectangle() {
this.width = 0;
this.height = 0;
}
// 매개변수 하나인 생성자
public Rectangle(int size) {
this.width = size;
this.height = size;
}
// 매개변수 두 개인 생성자
public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
}
오버로딩 VS 오버라이딩
- 오버로딩(Overloading)은 기존에 없던 새 메서드를 정의 loading → 확장
- 오버라이딩(Overriding)은 상속 메서드의 내용만 변경 Riding → 재정의
- 오버라이딩(Overriding)3가지 조건
메소드의 이름이 일치
메소드 매개변수의 개수, 순서 그리고 데이터 타입이 일치
메소드의 return 타입이 일치
This
객체 자신 참조 키워드( 객체 자기자신)
현재 객체를 가리키는 참조 변수
- 클래스 내부에서 사용되며, 해당 클래스의 인스턴스를 지칭(static메서드 사용 불가 -인스턴스 내에서만 사용 0)
예제)
public class Codeup1098OOP {
private int[][] arr;
public Codeup1098OOP(int[][] arr) { // parameter로 받은 arr
this.arr = arr;
// class의 arr = parameter로 받은 arr
}
}
추상클래스
-추상 메소드를 포함하는 클래스
- Class에 abstract 제어자가 붙은 미완성인 클래스
※ abstract 키워드를 사용하여 정의하며, 다른 클래스들이 상속받아 사용할 수 있도록 설계
- 반드시 구현해야 하는 부분에 대해 명시적으로 표현
-추상 클래스 자체는 객체 생성 불가 (클래스를 인스턴스화 할 수 없다.)
-다중 상속 불가능
추상클래스 특징
-직접 인스턴스를 생성할 수 X
-하나 이상의 추상 메서드를 가지며, 메서드의 시그니처만을 정의하고 메서드 구현은 하위 클래스에서 구현
-일반적인 메서드를 가질 수 0 , 하위 클래스에서 필요에 따라 오버라이딩이 가능
-상속받은 하위 클래스는 추상 메서드를 반드시 구현해야함
-반드시 구현체가 필요
예제)
// 추상 클래스 ShapeDrawer
public abstract class ShapeDrawer {
// 이 메소드는 공통으로 사용 가능
public void printShape(int height) {
for (int i = 0; i < height; i++) {
System.out.print(makeALine(height, i));
}
}
public abstract String makeALine(int h, int i);
}
// 추상 클래스 ShapeDrawer 상속(extends)
public class PyramidShapeDrawer extends ShapeDrawer{
@Override
public String makeALine(int h, int i) {
// 추상 클래스를 상속- 반드시 내부 추상메소드 구현
return String.format("%s%s\n", " ".repeat(h - i - 1), "*".repeat(2 * i + 1));
}
}
DI(Dependency Injection)- 의존성 주입
-객체 지향 프로그래밍에 사용되는 설계 패턴 및 소프트웨어 개발 기술
-객체간 결합도 낮추기 위해 사용
-재사용 가능 코드 생성 0
예제)
DiEx Class에서 ShapeDrawer를 사용(의존 Depends)
public class DiEx {
private ShapeDrawer shapeDrawer;
public DiEx(ShapeDrawer shapeDrawer) {
this.shapeDrawer = shapeDrawer;
}
public void doSth() {
shapeDrawer.printShape(5);
}
}
'Java > Java' 카테고리의 다른 글
o(n2)의 시간복잡도 / 버블정렬 / 삽입정렬/선택정렬 (0) | 2023.05.18 |
---|---|
Collection-List Array/Generic/Constructor/Getter/Setter (0) | 2023.05.16 |
메소드 (0) | 2023.05.09 |
소인수분해/ 최대 최소값 (0) | 2023.05.06 |
홀수/ 약수/소수 (0) | 2023.05.06 |