자바

김주영·2022년 8월 5일
0

자바 <면접>

목록 보기
1/9
post-thumbnail

🌱 객체 지향 프로그래밍이 뭔가요?


컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.

🌿 객체 지향 프로그래밍의 장단점은?


코드 재사용과 유지보수가 쉽습니다. 상속이나 인터페이스 구현을 통해 확장하는 식으로 코드를 구성하므로 재사용성이 높고 필드와 메소드를 가진 클래스 단위로 개발하기 때문에 변경이 쉬워 유지보수가 수월합니다.

반면 캡슐화와 격리 구조 때문에 절차지향 프로그래밍에 비해 실행 속도가 떨어집니다. 또한, 객체지향에서는 모든 것을 객체로 생각하기 때문에 추가적인 포인터 크기의 메모리와 연산에 대한 비용이 들어갑니다.

🌿 Getter와 Setter는 왜 사용하나요?


객체들의 데이터를 외부에서 직접 접근하는 것을 막기 위해 사용합니다. 주로 private과 함께 사용하며, 객체 무결성을 보장하는 것이 목적입니다.

🌱 String, StringBuilder, StringBuffer 차이


  • String

    불변 속성 -> 문자열 연산이 많을 때는 사용할 수 없음
    불변 속성이기 때문에 멀티쓰레드 환경에서의 안정성 지원

  • StringBuilder

    가변성 -> 동일 객체 내에서 문자열 변경 가능
    동기화 지원x -> 멀티쓰레드 환경에서 사용이 적합하지 않음
    하지만 단일쓰레드에서의 성능은 StringBuffer보다 좋음

  • StringBuffer

    가변성 -> 동일 객체 내에서 문자열 변경 가능
    동기화 지원 -> 멀티쓰레드 환경에서 안정성을 가짐

ref : https://ifuwanna.tistory.com/221

🌱 substring vs subSequence


  • return

    substring : String
    subSequence : CharSequence (Type : String)

  • String

    하나의 클래스입니다.
    Java 프로그램의 모든 문자열 리터럴은 이 클래스의 인스턴스로 구현된다. 중요한 점은 문자열 값은 작성된 후에 변경할 수 없다는 것이다. 변경을 원할 경우, StringBuilder나 StringBuffer를 사용해야 한다.

  • CharSequence

    인터페이스이다.
    char 값을 읽을 수 있는 시퀀스이다. 그리고 이 인터페이스는 다양한 종류의 char 시퀀스에 대해 균일한 읽기 전용 접근 권한을 제공한다.
    CharSequence를 implements 하여 구현된 대표적인 클래스로는 String, SpannableStringBuilder, StringBuilder, StringBuffer 등이 있다.

    중요한 점은 CharSequence는 변형과 가공을 할 수 있어 스타일 문자 또는 연속된 문자라고도 한다.

  • 결론

    substring 보다 subSequence 를 사용하는 것이 문자열 가공이나 변형에 편리하다.

ref : https://dudmy.net/android/2017/09/15/difference-char-string/

🌱 Java에서 문자열 정렬


🌿 Arrays.sort()

주어진 문자열을 문자 배열로 만들어 정렬하는 방법

import java.util.Arrays;
 
class Main
{
    public static void main(String[] args)
    {
        String str = "CADB";
 
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        str = new String(chars);
 
        System.out.println(str);
    }
}

🌿 Stream 정렬 - chars()

chars()를 이용하여 문자열을 IntStream 으로 다룰 수 있도록 함
IntStream을 정렬하고 StringBuilder를 통해 다시 String으로 반환

class Main
{
    public static void main(String[] args)
    {
        String str = "CADB";
 
        str = str.chars()        // IntStream
                .sorted()
                .collect(StringBuilder::new,
                        StringBuilder::appendCodePoint,
                        StringBuilder::append)
                .toString();
 
        System.out.println(str);
    }
}

StringBuilder를 만들어 값을 누적할 때는 appendCodePoint 메서드가
누산기 역할을 함

🌿 Stream 정렬 - split()

문자열의 각 문자를 단일 문자 문자열로 변환한 후 정렬하는 방법

import java.util.stream.Collectors;
import java.util.stream.Stream;
 
class Main
{
    public static void main(String[] args)
    {
        String str = "CADB";
 
        str = Stream.of(str.split(""))
                    .sorted()
                    .collect(Collectors.joining());
 
        System.out.println(str);
    }
}

ref : https://www.techiedelight.com/ko/sort-string-java/

🌱 String을 Null-Safe하게 비교하기


java.util.Objects.equals(Object, Object)

Java 7부터 java.util.Objects의 static 메소드 equals(Object, Object)를 사용할 수 있다.

이 메소드는 둘 다 null이면 true를, 둘 중 하나가 null이면 false를, 그렇지 않으면 equals의 결과를 리턴한다.

nullable한 객체에서 메소드를 호출하는게 아니라 static 메소드이므로 NullPointerException의 발생 가능성이 없고 별도의 라이브러리를 추가할 필요가 없다는 장점이 있다.

ref : https://atoz-develop.tistory.com/entry/JAVA%EC%97%90%EC%84%9C-String%EC%9D%84-Null-Safe%ED%95%98%EA%B2%8C-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0

0개의 댓글