< JAVA > 스프링을 위한 자바 문법

Zero·2022년 3월 31일
0

1. 어노테이션

스프링은 IoC(Inversion of Control) 컨테이너 관리권을 가지고 있어 어노테이션을 사용하여 의존성 주입을 한다.

💡 어노테이션이란 ?

  • 주석이라는 의미를 가진다.
  • 자바 소스 코드에 사이에 @ 기호를 앞에 붙여 사용

💡 어노테이션 용도

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  • 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 실행시(런타임시)특정 기능을 실행하도록 정보를 제공

ex. @override

  • 선언한 메서드가 오버라이드 되었다는 것을 나타낸다.
  • 상위(부모) 클래스 (또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킨다.

메모리 종류

static 메모리

main 함수가 시작되기 전에 메모리에 떠서 main 함수가 종료될 때 메모리에서 사라진다.
주로 하나 밖에 없는 것 , 무조건 떠 있는 것 , 끝까지 띄우려는 것에 사용

  • 무조건 전역 변수이다.
  • main이 실행되기 전 뜨기 때문에 타이밍 컨트롤 x (단점)

Stack 메모리

함수 내부에 존재하는 메모리로 생명주기가 짧으며 이를 지역변수라고도 한다.
실행시에 뜬다.

Heap 메모리

method를 new할 때 사용하는 메모리

오버로딩과 오버라이딩

1) 오버로딩(Overloading)

동일한 이름의 method를 타입과 유형만 달리하여 몇 번이고 사용하는 기술

-> attack 메서드의 parameter가 모두 다르다.

2) 오버라이딩(Overriding) : 무효화

부모 클래스와 자식 클래스의 이름이 같을 경우 부모 클래스를 무효화시키는 기술(재정의)

-> 부모 클래스의 sound() 메서드를 자식 클래스인 Cat과 Dog에서 재정의하였다.

Getter & Setter

행위를 통해 상태에 접근하는데 이때 실수 방지를 위해 상태를 private 변수로 잡는다.
일반적인 방법으로 접근할 수 없는 private에 담긴 변수를 확인하기 위한 public 변수를 만들어주는데 이것이 바로 Getter와 Setter이다.

-> 목마름이라는 변수를 Private으로 선언하였기 때문에 접근할 수 없다. 따라서 목마름 변수를 읽어주는 get을 이용한다

인터페이스 , Interface

특정 기능을 개발하는데 있어 공통적인 기능을 명시하고 강제적으로 구현하게끔 하는 역할
다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서 , 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스
오로지 추상 메소드와 상수만 포함

인터페이스 정의

  • 인터페이스(interface)라는 키워드를 사용해서 정의
  • 접근제어자로 public 또는 default가 명시
  • 인터페이스의 변수 값은 "public static final" 키워드가 생략된 상수이므로 주어진 값으로만 사용 가능
  • getManufacture과 getOS는 "public abstract" 키워드가 생략된 메소드로 인터페이스를 구현하는 곳에서 오버라이딩을 강제시킨다.

인터페이스 구현

  • 인터페이스 구현은 implements 키워드를 통해 일반 클래스에서 인터페이스를 구현
  • IPhone 클래스와 Galaxy 클래스는 phone 인터페이스의 규격에 맞게 재정의

인터페이스 상속

  • 인터페이스는 다중 상속이 가능하여 여러 인터페이스를 상속받아 하나의 인터페이스를 만들 수 있다.

  • 이럴경우 모든 인터페이스에 존재하는 메소드를 재정의 해야 한다.

  • Phone 과 Watch 인터페이스를 상속받은 Device 인터페이스를 생성
  • Device 인터페이스를 구현하는 일반 클래스에서 Phone 인터페이스와 Watch 인터페이스에 있는 메소드들은 모두 구현해야만 한다.

인터페이스 기본 메소드 (Default Method)

  • 자바 8이전의 인터페이스를 정의할 때는 메소드를 선언할 뿐 내부에서 구현되는 코드 x
  • 자바 8이후 default 메소드를 이용하면 인터페이스 내부에서 코드 존재 o
  • default 메소드는 오버라이딩이 강제적이 아닌 선택적이다
    --> 오버라이딩 안하면 기본 구현된 default 메소드가 실행된다.
  • default 키워드는 무조건 명시해야 한다
  • 하위호환성을 위해 주로 사용

  • Phone 인터페이스에 printRing 이라는 default 메소드를 만들었음
  • 인터페이스를 구현하는 클래스에서 선택적으로 오버라이딩을 할 수 있고 Galaxy 클래스에서는 재정의를 , IPhone 클래스에서는 그대로 사용

-> 실행시켜보면 IPhone은 default 메소드가 실행된 것을 볼 수 있다

인터페이스 static 메소드 (자바 8)

  • 자바 8이후에 default 메소드와 마찬가지로 static method도 추가되었습니다.
  • static method는 인스턴스 생성 없이 인터페이스 이름을 통해서 직접 메소드 호출 가능
  • 인터페이스를 구현하는 클래스에서 재정의가 불가

-> printUser() 메소드를 인터페이스 이름을 통해 직접 호출하였음.

인터페이스 private 메소드 (자바 9)

  • 코드 구현 시 복잡한 코드를 한 번에 구현하는 것보다 작은 메소드를 작성하여 복잡한 메소드를 구현하는 것이 재사용 , 유지보수 측면에서 효율적
  • private 메소드를 이용하여 작은 메소드를 구현하되 외부에서 볼 수 없고 사용할 수 없도록 만드는 메소드

-> pritUser() 메소드와 printRing()메소드에서 private 으로 선언한 작은 메소드를 이용하고 있음 , 한 번에 구현하는 것이 아닌 작은 메소드를 작성하여 그 메소드를 이용

추상 클래스와 인터페이스 비교

  • 인터페이스는 특정 기능을 구현하기 위한 필수 규격을 주는 것으로 추상클래스는 미완성 설계도, 인터페이스는 기본 설계도라고 본다

  • 모든 클래스를 인터페이스를 사용한다면 공통된 기능을 모두 구현해야 하기 때문에 번거로운 작업입니다. 이럴경우 추상클래스를 이용해야 한다.

  • 하지만, 추상클래스만 사용하기에는 다중상속이 불가하기 때문에 각각 다른 추상클래스를 구현하는데 공통된 기능이 존재할 경우는 인터페이스가 필요하다.

0개의 댓글