들어가며:

  Scala가 좋은게 java의 기존 라이브러리를 그대로 전부 사용이 가능하다는게 장점이다. 기존에 java로 구현이 많이 되어 있는데, 해당 라이브러리를 scala로 모두 변경해야 한다면, 정말 너무 슬프다. 하지만 아무래도 scala에서 지원하는 collection과 java에서 지원하는 collection의 함수가 다르기 때문에, scala의 함수도 익숙해질겸 변경이 가능하면 변경해서 사용하려고 했다. 

  해결하고 싶었던 문제는 java.util.list.List[String]에 있는 String의 리스트를 하나의 String으로 변경시키고 싶었다. 자바 8이상에서는 String.join(“”, list)를 하면 쉽게 변환이 가능하다. 파이썬에서 이처럼 사용했었는데, 자바도 지원을 해준다. 하지만 scala로 해보고 싶어서 java.util.list.List[String]을 변환했다. 

소스코드:

인터페이스(Interface)와 추상클래스(Abstract)의 차이

우리 면접에서도 자주 등장하는 질문중에 하나가 인터페이스와 추상클래스의 차이가 무엇인가요? 라고 하면 음.. 나는 분명 interface와 abstract를 써보긴 했는데, 이 두개의 차이를 생각하지 않고 사용을 했습니다. 거의 대부분 interface의 키워드를 사용해서 구현을 했습니다. 그렇다면 인터페이스와 추상클래스의 차이가 무엇일까요?

우리는 학교다닐때나 책으로 접할때는 항상 외우기 시작합니다. 어떻게? 아래 처럼...

  • 추상클래스는 부분적으로 완성된 설계도, 인터페이스는 밑그림만 그려져 있는 기본 설계도
  • 추상클래스는 단일 상속만 가능(extends), 인터페이스는 다중 상속이 가능 (implements)
  • 추상클래스란 추상 메소드를 한개 이상 포함하고 있는 클래스  

인터페이스는 상수와 몸통이 없는 메소드로 구성되어 있고, 즉 추상메소드와 상수만으로 구성된 것이 인터페이스 입니다. 추가할 경우에는 인터페이스는 모든 것에 대한 수정이 필요합니다. 

그렇다면 왜 쓸까요?

1. 개발 시간을 단축 시킬 수 있습니다. 

동시에 다른 한 쪽에서는 인터페이스를 구현하는 클래스를 작성 하도록 하여 동시 개발이 가능합니다. 구현부와 선언부를 분리 시킬 수 있기 때문에 실제 구현에서 독립적인 프로그램을 작성하는것이 가능합니다. 

2. 표준화가 가능합니다. 

개발자들에게 인터페이스를 구현하여 프로그램을 일관되고 정형화된 프로그램의 개발이 가능합니다. 


[Java] Set 정렬하는 방법 :: HashSet을 List로 변환

들어가며

  Set은 중복없이 값을 넣기 위한 객체입니다. List로도 add할때 값이 있는지 확인하고, 없으면 삽입, 있으면 패스하는 간단한 로직으로도 Set을 구현 할 수 있습니다. 이러한 Set을 정렬하는 방법은 여러가지 방법이 있지만 제가 주로 사용하는 방법에 대해서 설명해드릴려고 합니다. 

예제코드

  fruits의 Set의 객체가 있고, banana, apple, peach의 중복없는 값을 삽입합니다. 이렇게 삽입한 set을 정렬하기 위해서는 fruits의 객체를 List로 변환을 해야합니다. 변환하는 방법은 간단합니다.  ArrayList를 만드는 방식과 동일하고 생성자에 fruits를 넣어주면 리스트 형태로 변환이 됩니다. 리스트를 정렬하기 위해서는 Collections를 사용하면 되는건 모두 아셨죠? 정렬을 한 뒤에 결과를 출력하면 "apple", "banana", "peach"가 출력이 됩니다.
Set fruits = new HashSet();

fruits.add("banana");
fruits.add("apple");
fruits.add("peach");

// Set을 List로 변환
List frutList = new ArrayList(fruits);
// List 정렬
Collections.sort(fruitList);
// 결과 출력
for (String s : fruitList){
    System.out.println(s);
}
// "apple", "baana", "peach"


+ Recent posts