스칼라 인터뷰 질문과 답변

스칼라 면접 질문과 답변에 오신 것을 환영합니다. 요즘 대부분의 금융/은행, 정부, 통신, 소셜 네트워킹 등의 회사들은 프로젝트를 개발하기 위해 스칼라, 플레이 및 악카 프레임워크를 사용하고 있습니다. 이러한 프레임워크들은 OOPs와 FP 기능을 모두 지원하며 많은 이점을 제공합니다.

스칼라 면접 질문

몇 가지 게시물을 통해 제 면접 지식과 스칼라 생태계 또는 풀스택 스칼라 (스칼라/플레이/악카) 개발 경험을 공유하려고 합니다. 제가 3개의 별도 게시물을 공유할 예정입니다. 일부 질문은 한 개의 질문이며 일부는 하위 질문이 포함되어 있습니다. 총 200개 정도의 질문을 다룰 예정입니다. 이 모든 질문에 익숙하다면 스칼라 개발자 면접을 통과할 수 있을 것입니다. 그러나 풀스택 스칼라 개발자로서 계속 진행하려면 이러한 풀스택 스칼라 기술들을 철저히 학습해야 합니다.

소개

I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:

  1. Scala Interview Questions and Answers:
    1. Scala 기본 인터뷰 질문 및 답변:-
    – Freshers 또는 Java 개발자로서 Scala 개발로 이동하려는 분들에게 유용한 몇 가지 기본 Scala 인터뷰 질문을 논의할 것입니다.
    2. Scala 중급 인터뷰 질문 및 답변:-
    – 2년 이상의 Scala/Java 개발 경험이 있는 분들에게 유용한 몇 가지 인터뷰 질문에 대해 논의할 것입니다.
    3. Scala/Java 동시성 및 병렬성 인터뷰 질문 및 답변:-
    – 시니어 또는 경험이 많은 Scala/Java 개발자에게 유용한 Scala/Java 동시성 및 병렬성 인터뷰 질문과 답변에 대해 논의할 것입니다.

– 또한 Java에서 Scala로 이동하는 사용자들이 Scala 및 Java 구조 간의 차이점에 대해 이해할 수 있도록 이에 대한 논의를 할 것입니다.
이 게시물에서는 기본 Scala 인터뷰 질문에 대해 다뤄보겠습니다. 나머지 두 섹션에 대한 내게 다가오는 게시물을 읽어보세요.

Scala 기본 인터뷰 질문

이 섹션에서는 모든 Scala 기본 인터뷰 질문을 나열하고 다음 섹션에서는 이에 대해 자세히 논의할 것입니다.

  1. Scala란 무엇인가요? 언어인가요 아니면 플랫폼인가요? OOP 또는 FP를 지원하나요? Scala의 아버지는 누구인가요?
  2. Scala는 정적으로 타입이 지정된 언어인가요? 정적으로 타입이 지정된 언어와 동적으로 타입이 지정된 언어는 무엇인가요? 정적으로 타입이 지정된 언어와 동적으로 타입이 지정된 언어의 차이는 무엇인가요?
  3. Scala는 순수한 OOP 언어인가요? Java는 순수한 OOP 언어인가요?
  4. Scala는 모든 함수형 프로그래밍 개념을 지원하나요? Java 8은 모든 함수형 프로그래밍 개념을 지원하나요?
  5. Scala 언어의 주요 장점은 무엇인가요? Scala 언어의 단점은 있나요?
  6. Scala 언어의 주요 단점은 무엇인가요?
  7. Scala 언어의 주요 목표는 무엇인가요?
  8. 현재 인기있는 JVM 언어는 무엇인가요?
  9. Java의 java.lang.Object 클래스와 같이 Scala의 모든 클래스의 수퍼 클래스는 무엇인가요?
  10. Scala에서 기본 접근 제어자는 무엇인가요? Scala에 “public” 키워드가 있나요?
  11. Scala에서 “Type Inference”는 무엇인가요?
  12. Scala의 Int와 Java의 java.lang.Integer의 차이점은 무엇인가요? Scala에서 Int와 RichInt의 관계는 무엇인가요?
  13. Scala에서 Nothing은 무엇인가요? Scala에서 Nil은 무엇인가요? Scala에서 Nothing과 Nil의 관계는 무엇인가요?
  14. Scala에서 Null은 무엇인가요? Scala에서 null은 무엇인가요? Scala에서 Null과 null의 차이점은 무엇인가요?
  15. Scala에서 Unit은 무엇인가요? Java의 void와 Scala의 Unit의 차이는 무엇인가요?
  16. val과 var의 차이는 무엇인가요?
  17. Scala에서 REPL이란 무엇인가요? Scala의 REPL을 사용하는 방법은 무엇인가요? CMD 프롬프트에서 Scala REPL에 어떻게 접근하나요?
  18. Scala의 특징은 무엇인가요?
  19. 우리는 어떻게 함수형으로 루프를 구현할 수 있나요? OOP와 FP 스타일 루프의 차이는 무엇인가요?
  20. Scala에서 “Application”이란 무엇인가요? Scala의 “App”이란 무엇인가요? Scala의 App을 사용하는 목적은 무엇인가요?
  21. Scala는 연산자 오버로딩을 지원하나요? Java는 연산자 오버로딩을 지원하나요?
  22. 표현식(Expression)이란 무엇인가요? 문장(Statement)이란 무엇인가요? 표현식과 문장의 차이는 무엇인가요?
  23. Java의 “If…Else”와 Scala의 “If…Else”의 차이는 무엇인가요?
  24. Scala는 표현식 기반 언어(Expression-Based Language)인가요, 문장 기반 언어(Statement-Based Language)인가요? Java는 표현식 기반 언어인가요, 문장 기반 언어인가요?
  25. Java에서 지원되지만 Scala에서 지원되지 않는 기능과 그 반대의 예를 몇 가지 말해주세요.
  26. Scala에서 함수와 메소드의 차이는 무엇인가요?
  27. Scala 소스 파일에서 정의할 수 있는 public 클래스 파일은 최대 몇 개인가요?
  28. Java와 마찬가지로 Scala 언어의 기본 임포트는 무엇인가요?
  29. Scala에서는 연산자가 몇 개이며 왜 그렇게 되었나요?
  30. Java에서 사용되지만 Scala에서는 필요하지 않은 일부 키워드를 언급해주세요. Scala에서 왜 이러한 키워드가 필요하지 않은가요?
  31. Scala에서 PreDef란 무엇인가요?

이전 게시물을 확인하려면 이 링크를 클릭하세요.

Scala Interview Questions and Answers

이 섹션에서는 위 목록에서 각 질문을 하나씩 채택하여 필요한 경우 적절한 예와 함께 자세히 논의할 것입니다. 이러한 개념을 예제와 함께 깊이 이해하려면 Scala Tutorials 섹션의 이전 게시물을 확인하십시오.

Scala는 어떤 언어인가요? 언어인가요, 아니면 플랫폼인가요? OOP 또는 FP를 지원하나요? Scala의 아버지는 누구인가요?

Scala는 SCAlable LAnguage의 약자입니다. Martin Odersky는 Scala의 창시자입니다. Scala는 다중 패러다임 프로그래밍 언어로, 객체지향 및 함수형 프로그래밍 개념을 모두 지원합니다. 이는 Martin Odersky에 의해 디자인 및 개발되었습니다. Scala는 안전한 유형 시스템을 갖춘 객체-함수형 프로그래밍 JVM 언어입니다. Scala는 JVM(Java Virtual Machine)에서 실행됩니다. 또한 Scala는 혼합형 기능(객체지향 및 함수형) 프로그래밍 JVM 언어입니다. Scala는 강력하고 정적인 유형 시스템을 갖추고 있습니다. Scala에서는 모든 유형이 컴파일 시간에 확인됩니다.

Scala는 정적 유형 언어입니까? 정적 유형 언어와 동적 유형 언어는 무엇인가요? 정적 유형 언어와 동적 유형 언어의 차이점은 무엇인가요?

예, Scala는 정적으로 형식이 지정된 언어입니다. 정적으로 형식이 지정된 언어는 컴파일러에 의해 컴파일 타임에 형식 확인이 이루어지며 실행 중에는 이루어지지 않습니다. 이러한 종류의 언어의 주요 이점은 개발자로서 올바른 코드를 작성하여 컴파일 타임 오류를 방지해야 한다는 것입니다. 컴파일러가 컴파일 타임에 많은 오류를 확인하므로 실행 중에는 많은 문제나 버그가 발생하지 않습니다. :- Java, Scala, C, C++, Haskell 등. 동적으로 형식이 지정된 언어는 컴파일 타임이 아닌 실행 중에 형식 확인이 이루어집니다. 컴파일러는 컴파일 타임에 어떤 형식 확인도 수행하지 않기 때문에 실행 중에 더 많은 런타임 문제나 버그가 발생할 수 있습니다. :- Groovy, JavaScript, Ruby, Python, Smalltalk 등.

Scala는 순수 객체 지향 언어입니까? Java는 순수 객체 지향 언어입니까?

순수 객체 지향 프로그래밍 언어는 모든 것이 객체여야 한다는 것을 의미합니다. Java는 순수 객체 지향 프로그래밍 (OOP) 언어가 아닙니다. 왜냐하면 다음 두 가지 비-OOP 개념을 지원하기 때문입니다:

  • Java는 원시 데이터 유형을 지원합니다. 이는 객체가 아닙니다.
  • Java는 정적 멤버를 지원합니다. 이는 객체와 관련이 없습니다.

예, Scala는 순수 객체 지향 프로그래밍 언어입니다. Scala에서 모든 것은 객체이자 값입니다. 함수는 값이며 값은 객체입니다. Scala에는 원시 데이터 유형이 없으며 정적 멤버도 없습니다.

Scala는 모든 함수형 프로그래밍 개념을 지원합니까? Java 8은 모든 함수형 프로그래밍 개념을 지원합니까?

네, Scala는 모든 함수형 프로그래밍(FP) 개념을 지원합니다. Java 8은 일부 함수형 프로그래밍 구성 요소를 도입했지만 모든 함수형 프로그래밍 개념을 지원하지 않습니다. 예를 들어, Java 8은 패턴 매칭, 함수 커링, 암시적 등을 지원하지 않습니다.

Scala 언어의 주요 장점은 무엇입니까? Scala 언어의 단점은 있습니까?

Scala 언어를 사용하여 응용 프로그램을 개발하는 경우 다음과 같은 이점과 단점을 얻을 수 있습니다: Scala 언어의 장점:-

  • 간단하고 간결한 코드
  • 매우 표현적인 코드
  • 더 읽기 쉬운 코드
  • 100% 유형 안전한 언어
  • 불변성 및 부작용 없음
  • 더 재사용 가능한 코드
  • 더 많은 모듈화
  • 더 적은 코드로 더 많은 일을 처리할 수 있습니다.
  • 매우 유연한 구문을 지원합니다.
  • 모든 OOP 기능을 지원합니다.
  • 모든 FP 기능을 지원합니다. 매우 기능적입니다.
  • 오류가 적은 코드입니다.
  • 더 나은 병렬 및 동시성 프로그래밍입니다.
  • 높은 확장성과 유지 관리성을 가진 코드입니다.
  • 높은 생산성입니다.
  • 분산 애플리케이션입니다.
  • 완전한 Java 상호 운용성입니다.
  • 강력한 Scala DSL이 제공됩니다.
  • Scala 기본 학습을 위한 REPL입니다.

Scala 언어의 단점:-

  • 코드가 덜 읽기 쉽습니다.
  • 초보자에게는 코드를 이해하기 어렵습니다.
  • 학습하기 어려운 복잡한 구문입니다.
  • 역호환성이 더 적습니다.

참고: Scala 코드를 읽기 쉽거나 덜 읽기 쉬운 방식으로 작성할 수 있습니다.

Scala 언어의 주요 단점은 무엇인가요?

다른 많은 장점들과 함께 Scala는 하나의 주요한 단점을 가지고 있는데, 그것은 역호환성 문제입니다. 최신 버전의 Scala로 업그레이드하려면 일부 패키지 이름, 클래스 이름, 메소드 또는 함수 이름 등을 변경해야 합니다. 예를 들어, 오래된 Scala 버전을 사용하고 있는 경우에 프로젝트에서 BeanProperty 주석을 사용하고 있다면, 이는 이전 버전에서 “scala.reflect.BeanProperty”과 같이 “scala.reflect” 패키지에 있었습니다. 최신 Scala 버전으로 업그레이드하려면 이 패키지를 “scala.beans”로 변경해야 합니다.

Scala 언어의 주요 목표는 무엇인가요?

자바의 “한 번 작성하면 어디서나 실행되는” 모토와 마찬가지로, Scala는 “더 적은 코드로 더 많은 작업을 수행한다” 또는 “더 적은 코드로 더 많은 작업을 수행한다”는 모토를 가지고 있습니다. “더 적은 코드로 더 많은 작업을 수행한다”는 더 복잡한 프로그램이나 논리를 적은 코드로 개발할 수 있다는 것을 의미합니다.

Java, Scala, Groovy 및 Closure는 가장 인기 있는 JVM (Java Virtual Machine) 언어입니다.

Scala, Groovy 및 Closure JVM 언어는 객체 지향 프로그래밍 및 함수형 프로그래밍 기능을 모두 지원합니다. Java SE 8은 모든 객체 지향 프로그래밍 기능을 지원합니다. 그러나 람다 표현식, 함수, 타입 추론, 고차 함수와 같은 매우 적은 함수형 프로그래밍 기능을 지원합니다.

Java의 java.lang.Object 클래스와 마찬가지로 Scala의 모든 클래스의 슈퍼 클래스는 무엇인가요?우리가 Java에서 모든 클래스의 (Java API 클래스 또는 사용자 정의 클래스) 슈퍼 클래스는 java.lang.Object임을 알고 있듯이, Scala에서도 모든 클래스 또는 트레이트의 슈퍼 클래스는 “Any” 클래스입니다. Any 클래스는 “scala.Any”와 같이 scala 패키지에 정의되어 있습니다.Scala에서 기본 액세스 한정자는 무엇인가요? Scala에 “public” 키워드가 있나요?

스칼라에서는 메소드, 함수, 트레이트, 객체 또는 클래스에 액세스 한정자를 명시하지 않으면 기본 액세스 한정자는 “public”입니다. 또한 필드에 대해서도 “public”이 기본 액세스 한정자입니다. 이 기본 기능 때문에 스칼라에는 “public” 키워드가 없습니다.

스칼라에서의 “유형 추론(Type Inference)”이란 무엇인가요?

스칼라 컴파일러는 컴파일 시간에 유형을 추론할 수 있습니다. 이를 “유형 추론”이라고합니다. 여기서 유형은 데이터 유형 또는 결과 유형을 의미합니다. 변수 유형, 객체 유형, 메소드/함수 매개변수 유형, 메소드/함수 반환 유형 등 많은 곳에서 스칼라 프로그램에서 유형을 사용합니다. 간단히 말해, 컴파일러에 의해 컴파일 시간에 변수 또는 식 또는 객체 등의 유형을 결정하는 것을 “유형 추론”이라고합니다.

스칼라의 Int와 Java의 java.lang.Integer의 유사점과 차이점은 무엇인가요? Int와 RichInt의 관계는 무엇인가요?

스칼라의 Int와 Java의 java.lang.Integer의 유사점:

  • 둘 다 클래스입니다.
  • 둘 다 정수 숫자를 나타내는 데 사용됩니다.
  • 둘 다 32비트 부호있는 정수입니다.

Scala의 Int와 Java의 java.lang.Integer의 차이점:

  • Scala의 Int 클래스는 Comparable 인터페이스를 구현하지 않습니다.
  • Java의 java.lang.Integer 클래스는 Comparable 인터페이스를 구현합니다.

Java의 Integer는 Scala의 Int와 RichInt와 비슷합니다. RichInt는 “scala.runtime.RichInt”와 같은 scala.runtime 패키지에 정의된 최종 클래스입니다. Scala에서 Int를 Scala 프로그램에서 사용할 때 Int를 RichInt로 자동 변환하여 해당 클래스에서 사용 가능한 모든 메서드를 활용합니다. RichInt는 Int의 암시적 클래스라고 할 수 있습니다. (다음 게시물에서 “암시적 및 암시적의 장점”을 논의할 것입니다).

Scala에서 Nothing는 무엇입니까? Scala에서 Nil은 무엇입니까? Scala에서 Nothing과 Nil의 관계는 무엇입니까?

Scala에서 Nothing은 유형(최종 클래스)입니다. Scala 유형 시스템의 하단에 정의되어 있으며 이는 Scala에서 모든 것의 하위 유형임을 의미합니다. Nothing의 인스턴스는 없습니다. Scala에서 Nothing의 사용 사례:- Nothing에는 인스턴스가 없으므로 Scala 응용 프로그램에서 언제 사용합니까?

  • Nil은 Nothing을 사용하여 정의됩니다 (아래 예를 참조하십시오).
  • None은 Nothing을 사용하여 정의됩니다.
object None extends Option[Nothing]
  • 결코 반환하지 않는 메소드의 반환 유형으로 Nothing을 사용할 수 있습니다.
  • 비정상적으로 종료되는 메소드의 반환 유형으로 Nothing을 사용할 수 있습니다.

Nil은 빈 목록을 나타내는 데 사용되는 객체입니다. 아래에 “scala.collection.immutable” 패키지에 정의되어 있습니다:

object Nil extends List[Nothing]

예제:-

scala> Nil
res5: scala.collection.immutable.Nil.type = List()

scala> Nil.length
res6: Int = 0

Scala에서 Null은 무엇인가요? Scala에서 null은 무엇인가요? Scala에서 Null과 null의 차이는 무엇인가요?

Null은 Scala의 타입 (최종 클래스)입니다. Null 타입은 “scala” 패키지의 “scala.Null”로 사용할 수 있습니다. 이는 null이라는 하나의 인스턴스만 가지고 있습니다. Scala에서 “null”은 scala.Null 타입의 인스턴스입니다. 예제:-

scala> val myNullRef : Null = null
myNullRef: Null = null

Null 타입 참조에 다른 값을 할당할 수 없습니다. ‘null’ 값만 허용합니다. Null은 모든 참조 타입의 하위 타입입니다. Null은 Scala 타입 시스템의 가장 하위에 위치합니다. 값 타입의 하위 타입이 아니기 때문에 “null”을 값 타입의 변수에 할당할 수 있습니다. 예제:-

scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
       val myInt : Int = null

^ 여기에서 타입 불일치 오류가 발생합니다. 찾음: Null(null) 하지만 필요함: Int. Null과 Int 간의 암시적 변환이 적용되지 않습니다. 이는 모호하기 때문입니다.

스칼라에서 Unit은 무엇인가요? 자바의 void와 스칼라의 Unit의 차이는 무엇인가요?

스칼라에서 Unit은 “값이 없음” 또는 “유용하지 않은 값”을 나타내기 위해 사용됩니다. Unit은 “scala” 패키지에 정의된 final 클래스인 “scala.Unit”입니다. Unit은 자바의 void와 유사합니다. 그러나 몇 가지 차이점이 있습니다.

  • 자바의 void는 어떤 값도 가지지 않습니다. 아무것도 없는 것입니다.
  • 스칼라의 Unit은 하나의 값 ()
  • ()은 스칼라에서 Unit 타입의 유일한 값입니다. 그러나 자바에는 void 타입의 값이 없습니다.
  • 자바의 void는 키워드입니다. 스칼라의 Unit은 final 클래스입니다.

둘 다 메소드나 함수가 아무 값도 반환하지 않음을 나타내는 데 사용됩니다.

스칼라에서 val과 var의 차이는 무엇인가요?

스칼라에서 val과 var은 모두 변수를 정의하는 데 사용됩니다. 그러나 중요한 차이점이 있습니다.

  • var은 variable(변수)을 의미합니다.
  • val은 value(값)을 의미합니다.
  • 변수는 변경 가능하고 값은 상수임을 알고 있습니다.
  • var은 변수를 정의하는 데 사용되며, 한 번 생성된 후에 값에 재할당할 수 있음을 의미합니다.
  • val은 변경할 수 없는 변수를 정의하는 데 사용되며, 한 번 생성된 후에 값에 재할당할 수 없음을 의미합니다.
  • 간단한 Java 용어로 말하면, var은 ‘변수’를 나타내고 val은 ‘최종 변수’를 나타냅니다.

Scala에서 REPL이란 무엇인가요? Scala REPL의 사용 목적은 무엇이며, CMD 프롬프트에서 Scala REPL에 어떻게 액세스할 수 있나요?

REPL은 Read-Evaluate-Print Loop의 약어로 발음은 ‘리플’로 할 수 있습니다. Scala에서 REPL은 명령 프롬프트에서 Scala 코드를 실행하는 인터프리터로 작동합니다. 이것이 REPL이 Scala CLI(Command Line Interface) 또는 Scala 명령줄 셸로도 알려지는 이유입니다. REPL의 주요 목적은 실습 용도로 작은 Scala 코드 조각을 개발하고 테스트하는 것입니다. Scala 초보자가 기본 프로그램을 연습하는 데 매우 유용합니다. “scala” 명령을 사용하여 REPL에 액세스할 수 있습니다. CMD 프롬프트에서 “scala” 명령을 입력하면 REPL 셸을 얻게 되며 거기서 Scala 코드를 입력하고 실행할 수 있습니다.

D:\> scala

scala>

Scala의 주요 특징은 무엇인가요?

Scala 언어는 다음과 같은 기능을 지원합니다:

  • OOP-style(Imperative-Style) 및 Functional-Style 프로그래밍을 모두 지원합니다.
  • 순수 객체 지향 프로그래밍 언어입니다.
  • 모든 함수형 기능을 지원합니다.
  • REPL(Read-Evaluate-Print Loop) 인터프리터입니다.
  • 강력한 타입 시스템입니다.
  • 정적 타입 언어입니다.
  • 타입 추론을 지원합니다.
  • 패턴 매칭을 지원합니다.
  • 클로저를 지원합니다.
  • 영속적인 데이터 구조를 지원합니다.
  • 동시성 애플리케이션을 개발하기 위해 액터 모델을 사용합니다.
  • Java와 상호 운용이 가능합니다.
  • 모든 개발 도구 – IDE, 빌드 도구, 웹 프레임워크, TDD 및 BDD 프레임워크를 사용할 수 있습니다.

함수적으로 반복문을 어떻게 구현하나요? OOP와 FP 스타일의 반복문의 차이점은 무엇인가요?

객체 지향 스타일로 반복문을 구현하는 방법을 알고 있습니다. 가변적인 임시 변수를 사용하여 변수 값을 업데이트하고 반복문 구조를 사용합니다. 이는 매우 지루하고 안전하지 않은 접근 방식입니다. 이는 스레드 안전하지 않습니다. 객체 지향 스타일은 다음 구조를 사용하여 반복문을 구현합니다:

  • 반복문 구조
  • 가변성
  • 부작용

이전과 같이 루프를 함수형 방식으로 구현할 수 있습니다. 이는 스레드 안전합니다. 함수형 스타일로 루프를 구현하는 데 다음 두 기술을 사용할 수 있습니다:

  • 재귀
  • 테일 재귀
  • 불변성
  • 부작용 없음

스칼라에서의 “Application”이란 무엇인가요? 스칼라에서 “App”이란 무엇인가요? 스칼라의 App의 용도는 무엇인가요?

스칼라 어플리케이션: 스칼라에서 App은 “scala.App”과 같은 패키지에 정의된 트레이트입니다. 이는 main 메소드를 정의합니다. 객체나 클래스가 이 트레이트를 확장하면 main 메소드를 상속받아 스칼라 실행 프로그램이 됩니다. App을 사용하는 주요 이점은 main 메소드를 작성할 필요가 없다는 것입니다. App을 사용하는 주요 단점은 scala.App의 main() 메소드가 이 이름을 사용하여 명령줄 인수를 참조해야 한다는 것입니다. 예시:- 스칼라 App이 없는 경우:

object MyApp {
    def main( args: Array[String]){
        println("Hello World!")
    }
}

스칼라 App이 있는 경우:

object MyApp extends App{
   println("Hello World!")
}

위 두 예제를 관찰하면, 두 번째 예제에서는 main 메소드를 정의하지 않았습니다. 왜냐하면 우리는 스칼라 App(Application)에서 상속받았기 때문입니다. 스칼라 2.9 이전에는 scala.Application 트레이트가 있었지만, 스칼라 2.9 버전 이후로는 이것이 scala.App에 의해 사용되어 지게 되었습니다.

Scala는 연산자 오버로딩을 지원합니까? Java는 연산자 오버로딩을 지원합니까?

Java는 연산자 오버로딩을 지원하지 않습니다. Scala는 연산자 오버로딩을 지원합니다. 그 이유는 Java가 “+*/”와 같은 잘못된 메서드 이름을 지원하고 싶어하지 않기 때문입니다. Scala는 이러한 유연성을 개발자에게 메서드/함수 이름을 결정할 수 있도록 제공했습니다. 우리가 2 + 3을 호출할 때 ‘+’는 연산자가 아니라 Int 클래스 (또는 그것의 암시적 타입)에서 사용할 수 있는 메서드라는 것을 의미합니다. 내부적으로 이 호출은 “2.+(3)“으로 변환됩니다.

식이란 무엇인가요? 문장이란 무엇인가요? 식과 문장의 차이점은 무엇인가요?

표현: 표현은 값을 나타내며 값으로 평가될 것이라는 것을 의미합니다. 표현이 값을 반환하므로 변수에 할당할 수 있습니다. 예:- 스칼라의 If 조건, 자바의 삼항 연산자. 문: 문은 하나 이상의 작업이나 동작을 정의합니다. 이는 문이 작업을 수행한다는 것을 의미합니다. 값이 반환되지 않기 때문에 변수에 할당할 수 없습니다. 예:- 자바의 If 조건.

자바의 “If…Else”와 스칼라의 “If…Else”의 차이점은 무엇입니까?

자바의 “If…Else”: 자바에서 “If…Else”는 문이며 표현식이 아닙니다. 값이 반환되지 않으며 변수에 할당할 수 없습니다. 예:-

 int year;
 if( count == 0) 
   year = 2014;
 else 
   year = 2015;

스칼라의 “If…Else”: 스칼라에서 “If…Else”는 표현식입니다. 값이 평가됩니다. 변수에 할당할 수 있습니다.

 val year = if( count == 0) 2014 else 2015

**참고:-**스칼라의 “If…Else”는 자바의 삼항 연산자처럼 작동합니다. 아래에 표시된대로 스칼라의 “If…Else”를 자바의 “If…Else” 문처럼 사용할 수 있습니다:

 val year = 0
 if( count == 0) 
   year = 2014 
 else 
   year = 2015

Scala는 표현 중심 언어인가요, 아니면 문장 중심 언어인가요? Java는 표현 중심 언어인가요, 아니면 문장 중심 언어인가요?

Scala에서는 모든 것이 값으로 평가됩니다. 모든 표현식이나 문장은 값으로 평가됩니다. 표현식, 함수, 클로저, 객체 등을 변수에 할당할 수 있습니다. 따라서 Scala는 표현 중심 언어입니다. Java에서 문장은 표현식이나 값이 아닙니다. 변수에 할당할 수 없습니다. 따라서 Java는 표현 중심 언어가 아닙니다. 문장 중심 언어입니다.

Java에서는 지원되지만 Scala에서는 지원되지 않는 기능 몇 가지를 말해주세요. 그리고 그 반대로도요?

  • Java는 연산자 오버로딩을 지원하지 않지만, Scala는 지원합니다.
  • Java는 ++ 연산자를 지원하지만, Scala는 지원하지 않습니다.
  • Java에는 확인된 예외와 확인되지 않은 예외가 있지만, Scala에는 확인된 예외가 없습니다.
  • 스칼라는 break와 continue 문을 지원하지 않지만, 자바는 사용합니다.
  • 스칼라는 명시적인 형 변환을 갖고 있지 않지만, 자바는 이 기능을 지원합니다.
  • 스칼라는 패턴 매칭을 지원하지만, 자바는 지원하지 않습니다.
  • 자바는 기본 데이터 유형을 사용하지만, 스칼라는 그렇지 않습니다.
  • 자바는 정적 멤버를 지원하지만, 스칼라는 정적 멤버 개념이 없습니다.
  • 스칼라는 암시적 및 트레이트를 지원하지만, 자바는 그렇지 않습니다.

**참고:**이 목록은 한 페이지를 초과합니다. 그러나 이것들은 스칼라 인터뷰에서 스칼라와 자바 기능의 차이점을 직면하기 위해 기억해야 할 중요한 점입니다.

스칼라에서 함수와 메서드의 차이는 무엇입니까?

스칼라는 함수와 메서드 모두를 지원합니다. 함수와 메서드를 정의하는 데 동일한 구문을 사용하며, 구문의 차이가 없습니다. 그러나 그들은 하나의 미세한 차이가 있습니다:

  • 스칼라 클래스나 트레이트에 메서드를 정의할 수 있습니다. 메서드는 객체와 관련이 있습니다(클래스의 인스턴스). 클래스의 인스턴스를 사용하여 메서드를 호출할 수 있습니다. 객체를 사용하지 않고는 스칼라 메서드를 직접 사용할 수 없습니다.
  • 함수는 클래스나 트레이트와 관련이 없습니다. 스칼라 패키지에 정의됩니다. 객체를 사용하지 않고도 함수에 액세스할 수 있으며, 이는 자바의 정적 메서드와 유사합니다.

참고:- 다음 포스트에서 클래스, 특성, 패키지, 객체 등에 대해 논의할 것입니다.

Scala 소스 파일에서 공개 클래스 파일을 몇 개 정의할 수 있습니까?

Java에서는 소스 파일에서 최대 한 개의 공개 클래스/인터페이스를 정의할 수 있습니다. 그러나 Java와 달리 Scala는 동일한 소스 파일에서 여러 개의 공개 클래스를 지원합니다. Scala 소스 파일에서는 원하는 만큼 많은 공개 클래스/인터페이스/특성을 정의할 수 있습니다.

Java와 마찬가지로 Scala 언어에서의 기본 임포트는 무엇입니까?

우리는 모두 Java 프로그램에 자동으로 JVM에 의해 java.lang 패키지가 기본적으로 임포트된다는 것을 알고 있습니다. 이 패키지를 명시적으로 임포트할 필요가 없습니다. 마찬가지로 모든 Scala 프로그램에서 다음과 같은 기본 임포트가 가능합니다:

  • java.lang 패키지
  • scala 패키지
  • scala.PreDef

스칼라에는 몇 가지 연산자가 있고 그 이유는 무엇인가요?

자바와 달리 C++과 같이, 스칼라는 연산자 오버로딩을 지원합니다. 스칼라에는 “=” (equalto) 연산자 하나만 있습니다. 이 외에는 모두 메서드입니다. 예를 들어, 2 + 3에서 “+”는 스칼라에서 연산자가 아닙니다. “+”는 Int 클래스에서 사용 가능한 메서드입니다. 스칼라 컴파일러는 2와 3이 정수임을 감지하고 Int 클래스에서 “+” 메서드를 찾습니다. 따라서 스칼라 컴파일러는 “2 + 3” 표현식을 “2.+(3)”으로 변환하고 정수 객체 “2”에서 “+” 메서드를 호출하고 정수 객체 “3”을 “+” 메서드에 매개변수로 전달합니다. “2 + 3″과 “2.+(3)”은 동일합니다. 이것은 단지 함수형 스타일로 프로그램을 작성하기 위한 스칼라의 문법적 설탕입니다.

Java에서 사용되는 몇 가지 키워드를 언급해주세요. 그리고 스칼라는 왜 이러한 키워드를 필요로하지 않을까요?

자바는 다음과 같은 키워드를 널리 사용합니다:

  • ‘public’ 키워드 – 클래스, 인터페이스, 변수 등을 정의하는 데 사용됩니다.
  • ‘static’ 키워드 – 정적 멤버를 정의하는 데 사용됩니다.

스칼라는 이 두 키워드가 필요하지 않습니다. 스칼라에는 ‘public’과 ‘static’ 키워드가 없습니다.

  • 스칼라에서는 기본 접근 제어자가 클래스, 트레이트, 메서드/함수, 필드 등에 대해 ‘public’이기 때문에 ‘public’ 키워드가 필요하지 않습니다.
  • 객체지향 프로그래밍 원칙을 지원하기 위해 스칼라 팀은 ‘static’ 키워드를 피했습니다. 이것이 스칼라가 순수 객체지향 언어인 이유입니다. 동시성 애플리케이션에서 정적 멤버를 처리하는 것은 매우 어렵습니다.

스칼라에서 PreDef는 무엇인가요? 스칼라에서 PreDef의 주요 목적은 무엇인가요? 스칼라에서 PreDef는 “scala.PreDef”로 정의된 객체로 유틸리티 객체입니다. 아래에 표시된 대로 여러 유틸리티 메서드를 정의합니다:

  • 콘솔 I/O (print, println 등)
  • 컬렉션 유틸리티 메서드
  • 문자열 유틸리티 메서드
  • 암시적 변환 메서드
  • 단언 유틸리티 메서드 등.

예를 들어, print, println, readLine, readInt, require 등의 메서드는 PreDef 객체에 정의되어 있습니다. 스칼라에서 PreDef는 모든 컴파일 단위(Class, Object, Trait 등)에 이 객체를 자동으로 가져오기 때문에 모든 스칼라 프로그램에서 이 메서드를 가져다 사용할 수 있습니다. 이로써 “스칼라 기본 면접 질문과 답변”에 대한 모든 내용을 다루었습니다. 다음 게시물에서는 중급, 고급 및 실시간 스칼라 면접 질문과 답변을 논의할 것입니다. 제 글이 마음에 들거나 문제/제안이 있으면 댓글을 남겨주세요.

Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers