TIL7 [생활코딩][스프링입문]

givemacdonalds·2023년 12월 4일
0

TIL

목록 보기
8/16

[생활코딩]

유효범위

충돌 문제를 방지하기 위해서 유효범위(scope) 생겨남
(디렉토리를 예시로 생각해보면 됨)

지역변수

  • 메소드를 생성하면 그 안에서 생성되고 이용됨
  • 메소드 외부로 나가게 되면 없는 존재임

전역변수

  • 클래스 전역에 선언하기 때문에 어디서든지 사용 할 수 있게됨

this

인스턴스 자신을 의미함

class C{
	void m() {
    	int v=20;
        System.out.println(v); 		// 20
        System.out.println(this.v); // 10
      }
 }
 
public class ScopeDemo{
	public static void main(String[] args){
    	C c1 = new C(); //인스턴스 생성
    }
}

각 출력 값에 대한 이해

20 : 메소드의 지역변수
10 : C라는 클래스에서 생성한 인스턴스(자신)의 전역변수

생성자

class Calculator{ 
	int left,right; //전역변수
    
    public Calculator(int left, int right){ // 클래스와 똑같은 이름의 메소드
    	this.left=left; // 전역변수의 역할을 이 곳에서 진행하게 됨
        this.right=right;
    }
    
    public void sum(){
    	System.out.println(this.left + this.right)
    }
    
    public void avg(){
    	System.out.println((this.left + this.right)/2)
    }

}
public class CalculatorDemo1{
	public static void main(String[] args){
    	Calculator c1 = new Calculator();
        c1.sum();
        c1.avg()
    }
}

위의 소스코드에서 클래스 Calculator와 같은 이름의 메소드 Calculator는 생성자(constructor)라고 함

생성자

  • 어떤 메소드보다 실행해서 초기화 작업을 진행해야함
  • 클래스와 이름이 같아야함
  • 사용자가 숙지하고 반드시 해야하는 사항을 넣어야함
Calculator c1 = new Calculator();

우측에 있는 Calculator()는 인스턴스 생성자라고 함.

상속

Calculator c1 = new Calculator();
c1.setOprands(10,20);
c1.sum();
c1.avg();

위 코드에 아래 코드를 추가하려고 함

c1.substract();

substarct()를 추가하고 싶지만 다음과 같은 이유로 어려움이 있음
1. Calculatro 객체를 자신이 만들지 않았기 때문에 변경 할 수 있어도 원 소스를 업데이트하게 되면 해당 메소드는 사라지게 됨
2. 객체가 다양한 곳에서 활용되고 있는데 메소드를 추가하면 다른 곳에서는 불필요한 기능이 포함 될 수 있음

부모 클래스와 자식 클래스의 관계를 상위(upper)클래스와 하위(sub)클래스라고 표현함.

상속 구체화

class SubstractionableCalculator extends Calculator{
	public void substract(){
    	System.out.println(this.left - this.right);
    }
}

public class CalculatorDemo1{
    
    public static void main(String[] args){
    
      SubstractionableCalculator c1 = new SubstractionableCalculator();
      c1.setOprands(10,20);
      c1.sum();
      c1.avg();
      c1.substract();
 	}
 }

위의 자식 클래스인 SubstractionableCalculator가 부모 클래스인 Calculator를 상속받음

상속 사용하는 이유

  • 코드 중복제거
  • 유지보수 용이
  • 가독성 증가

[spring 입문]

  • 비즈니스 요구사항 정리
  • 회원 도메인과 리포지토리 만들기
  • 회원 리포지토리 테스트 케이스 작성
  • 회원 서비스 개발
  • 회원 서비스 테스트(JUnit)

테스트케이스 작성

지금까지 인터페이스와 구현체를 작성했다. 구현체가 잘 작동하는지 확인을 위해 테스트케이스를 작성해야함

JUnit

개발한 기능을 테스트 할 때 자바의 main메서드를 통해서 실행하거나, 웹 어플리케이션의 컨트롤러를 통해서 해당 기능을 실행하게 되면 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 진행하기 어려움

그래서 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결함


람다 함수

쓰는 이유?

1) 코드가 간결해짐
2) 필터링 및 매핑시 집계결과를 쉽게 가져옴

람다함수는 이렇게 쓰임

public int Sum(int left,int right){
	return a+b;
}

위의 메소드를 이런 식으로 변경됨

(a,b) -> {a+b}

(매개 변수) -> {실행문}

어떤 선언도 없이 익명의 함수가 됨

익명 함수란?

  • 클래스 정의 x
  • 리턴 타입 x

예외

  • 매개변수가 1개
a -> a*a;

()가 사라짐

  • 바디부분 표현식 1개
(a,b) -> a+b;

{} 생략 할 수 있음

  • return이 있으면 생략 할 수 없음
(a,b) -> {return a>b ? a:b}

Stream

1.생성하기
2.가공하기
3.결과만들기

0개의 댓글