Scope Function(범위 지정 함수)

  • 객체에서 람다 함수를 호출하면 해당 함수는 일시적인 Scope를 생성하고, 해당 Scope 안에서는 객체의 이름 없이도 접근이 가능하다.

 

apply

  • 참조 연산자를 사용하지 않는다.
  • 처리가 끝나면 인스턴스를 반환한다.
fun main() {
	var a = Food("사과",2000).apply{
    	name = "세일 중인" +name
        discount()
    }
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

run

  • 참조 연산자를 사용하지 않는다.
  • 처리가 끝나면 최종값을 반환한다.(마지막 구문의 값을 반환)
fun main() {
	var a = Food("사과",2000).apply{
    	name = "세일 중인" +name
        discount()
    }
   
    a.run {
    	println("상품명: ${name}, 가격: ${price}원")
    }
    
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

 

 

 

with

  • 인스턴스를 파라미터로 받는다.
    with(a) {
    	println("상품명: ${name}, 가격: ${price}원")
    }

 

also

  • 처리가 끝나면 인스턴스를 반환한다.
  • 파라미터를 통해 인스턴스를 넘긴다.

---- price 가 중복될 경우! -----

fun main() {
	var name = "오렌지"
	var a = Food("사과",2000).also{
    	it.name = "세일 중인" +it.name
        discount()
    }
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

 

 

let

  • 처리가 끝나면 최종값을 반환한다.
  • 파라미터를 통해 인스턴스를 넘긴다.

---- price 가 중복될 경우!  -----

fun main() {
    var price = 5000
	var a = Food("사과",2000).apply{
    	name = "세일 중인" +name
        discount()
    }
   
    a.let {
    	println("상품명: ${it.name}, 가격: ${it.price}원")
    }
    
}
class Food(var name: String, var price: Int){
	fun discount(){
    	price -= 500
	}
}

 

 

 

룸복(Lombok)

룸복(Lombok)이란 자바에서 model object를 만들때 멤버필드에 대한 Getter,Setter,ToString등 과 같이
불필요하게 반복적으로 만드는 코드를 어노테이션화하여 간결화시키는 라이브러리이다.
아래의 코드를 보면 쉽게 알 수 있다.

 

 

 

Model.class

public class Model{
 	private String id;
    private String modelId;
    private String name;
      public String getId() {
            return id;
      }
      
      public void setId(String id) {
            this.id = id;
      }
      
      public String getModelId() {
            return modelId;
      }
      
      public void setModelId(String modelId) {
            this.modelId = modelId;
      }
      
      public String getName() {
            return name;
      }
      
      public void setName(String name) {
            this.name = name;
      }
      
      @Override
       public String toString() {
            return "id + modelId+ name";
      }


}

 

 

 

@어노테이션을 사용해 간결하게 한다.

@Getter
@Setter
@ToString
public class Model{
	private String id;
    private String modelId;
    private String name;
}

 

 

 

아래와 같이 @Data로 변경하여 더 간결하게 사용!

@Data
public class Model{
	private String id;
    private String modelId;
    private String name;
}

 

 


Junit

 

Junit이란 자바 프로그래밍 언어용 테스팅 프레임워크이다.

 

  • assert메소드로 테스트케이스의 수행결과를 판별한다
  • 어노테이션을 제공한다(@Test,@Before,@After)


@Test
-@Test가 선언되면 테스트를 수행하는 메소드가 된다. (각자 테스트는 영향을 주지 않고 독립적으로 실행한다)

@Test
public class Test{
}

 

@Before

-@Before가 선언되면 Test메소드 전에 반드시 실행된다. 
(자바 static처럼 실행하기전 공통으로 사용할 코드를 미리 선언하는 개념 )

@Before
class Before{
//Test전에 실행 됨
}

 


@After

-@Test실행 된 후에 실행된다.

@After
class After{
//Test한 후에 실행 됨
}

 

 

 


log4j & slf4j

 

log4j(log for java)

 


log4j는 자바기반의 로깅 유틸리티를 말한다.
log4j는 높은 등급에서 낮은등급으로 6개의 로그 레벨을 가지고 있다.

 

 

깅 레벨 : FATAL -> ERROR -> WRN -> INFO -> DEBUG
FATAL : 치명적인 에러가 발생
ERROR : 일반 에러 발생
WARN : 에러x,주의할 필요가 있을 때 발생
INFO : 일반 정보
DEBUG : 일반 정보 상세하게

 

 

 


log4j는 크게 3가지 구성요소가 있다.


Logger -로깅 메세지를 Appender에 전달
Appender - 전달 메세지를 어디에 저장할지 정한다.
Layout - 어던 형식으로 출력할지 정한다.

 

 


slf4j(Simple Logging Facade for java)


slf4j는 logging framework의 추상체(facade) 역할을 한다.
logging framework에는 Log4j나 Logging,Logback등 다양한데 이 framework를

변경하려면 java코드를 직접 변경해야 한다.

하지만slf4j를 사용하면 java코드를 변경하지 않고 framework를 변경할 수 있다.

 

 

오버라이딩 vs 오버로딩 비교 & 정리

 

 

 

오버라이딩오버로딩의 차이에 대해 알아보자!

 

 

 

오버로딩(Overloading)

메소드 이름은 같지만 매개변수의 자료형이나 개수가 다른 경우를 오버로딩이라고 한다.

오버로딩에는 크게 두 가지로 생성자 오버로딩과 메소드 오버로딩으로 나눌 수 있다.

 

 

두 방법에는 크게 다른 점은 없지만 활용하는 방법 위주로 알아두면 된다.

 

 

 

 

메소드 오버로딩

public void graduate(int a){
	System.out.println(a);
}
public void graduate(int a,char b){
	System.out.println(a +","+ b);
}
public void graduate(String c){
	System.out.println(c);
}

 

 

생성자 오버로딩

public class Person{
	String name;
    int num;
    public Person(){}
    public Person(String name)
    {
    	this.name = name;
    }
    public Person(String name,int num)
    {
    	this.name = name;
        this.num =num;
    }
}
public class Example
{
	public static void main(String args[]){
    	// Person 객체 생성
    	Person person = new Person("SeungWon"); //name = SeungWon 
    	Person person = new Person("SeungWon",97); //name = SeungWon, num = 97
    }
}

 

  

 

 


 

 

오버라이딩(Overriding)

 

상위 클래스에 있는 메소드를 하위 클래스에서 재정의하는 과정을 오버라이딩이라고 한다.

 

  • 상속관계가 있는 자식 클래스에서 부모 클래스에게 메소드를 가져와 새롭게 사용한다는 의미이다.
class Animal{
public void cry(){
	System.out.println("ummm");
}  
}
class Dog{
public void cry(){
	System.out.println("bark");
}  
}
class Cat{
public void cry(){
	System.out.println("meow");
}  
}

+ Recent posts