분류 전체보기
-
스칼라의 리스트(List)카테고리 없음 2024. 8. 31. 23:14
스칼라의 List는 불변(immutable)이며, 여러 유용한 메서드와 연산을 제공한다. 리스트는 다음과 같이 정의한다. val x: List[Int] = Nil val y: List[Int] = List(1, 2, 3, 4) Nil은 빈 리스트를 나타낸다. 즉, x는 요소가 하나도 없는 Int 타입 리스트다. y는 1, 2, 3, 4라는 요소들을 가진 Int 타입의 리스트다. 스칼라에서는 리스트를 만들 때 List()를 사용한다. 이제 리스트에 요소를 추가하는 법을 알아보자 42 :: y :: 연산자는 리스트의 앞에 요소를 추가하는 연산자다. 여기서는 42를 y 리스트의 앞에 추가해서 새로운 리스트를 만든다. 결과는 List(42, 1, 2, 3, 4)가 된다. 이 연산은 불변 리스트의 특성에 따라 새..
-
패턴 매칭 vs if-else 절컴공지식/프로그래밍언어론 2024. 8. 31. 22:57
패턴 매칭(Pattern Matching)과 if-else 절은 모두 조건에 따라 다른 코드를 실행하는 방법이지만, 각각의 장단점과 사용 사례가 다르다. 패턴 매칭은 단순한 조건 비교뿐만 아니라, 데이터의 구조를 분석하고 그 구조에 따라 분기할 수 있다. 예를 들어, 객체의 타입, 내부 필드, 리스트의 패턴 등을 기준으로 분기할 수 있다.한 번의 match 구문 안에서 여러 경우를 처리할 수 있다.스칼라는 패턴 매칭에서 모든 경우를 처리하지 않으면 컴파일러가 경고를 주기 때문에, 오류를 미리 방지할 수 있어 디버깅에 유리하다. 그에 비해 if-else절은 단순히 조건이 true인지 false인지에 따라 코드의 실행 흐름을 결정한다.간단한 조건을 처리할 때는 if-else가 직관적이고 이해하기 쉽다. 조건..
-
스칼라의 패턴 매칭컴공지식/프로그래밍언어론 2024. 8. 31. 22:41
패턴 매칭은 스칼라에서 매우 강력하고 유용한 기능 중 하나이다.이걸 잘 이해하면 코드를 훨씬 간결하고 직관적으로 작성할 수 있다. 패턴 매칭은 주어진 값이나 표현식(expr)을 여러 패턴(case variant_id)과 비교해서, 어떤 패턴과 일치하는지에 따라 특정 코드를 실행하는 기능이다.스칼라에서 흔히 쓰이는 match 키워드를 이용해 이런 패턴 매칭을 구현할 수 있다. 기본 구조는 다음과 같다 expr match { case variant_id1 (field_id11, ...) => expr1 ... case variant_idm (field_idm1, ...) => exprm } expr: 여기에는 매칭할 표현식이나 값이 들어간다.match: 패턴 매칭을 시작하는 키워드야. expr의 ..
-
스칼라에서 타입을 정의하는 방법컴공지식/프로그래밍언어론 2024. 8. 31. 22:27
trait type-idtrait는 스칼라에서 타입을 정의하는 일종의 설계도라고 할 수 있다.자바의 인터페이스(Java interface)와 비슷하지만, 스칼라에선 조금 다르게 동작한다. trait는 클래스가 구현해야 할 메서드나 필드를 정의할 수 있다.하지만 실제로 그 메서드를 구현하지는 않는다.그 역할은 trait를 사용하는 클래스가 하게 된다. 중요한 점은 스칼라에서는 여러 trait을 상속받을 수 있다는 것이다.즉, 다중 상속이 가능하다. case class variant_id (field_id: type) ... extends type-idcase class는 스칼라에서 특별한 종류의 클래스다.자주 쓰이는 패턴을 간단하게 표현할 수 있게 해준다.case class는 자동으로 equals, has..
-
Scalar의 assert컴공지식/프로그래밍언어론 2024. 8. 31. 22:00
다음은 코드 예시다def areaOfSquare(a: Int) = a * a @main def runAreaCalculator(): Unit = { println("areaOfSquare(5) returns " + areaOfSquare(5)) assert(areaOfSquare(5) == 25, "Test failed for areaOfSquare(5)") println("areaOfSquare(3) returns " + areaOfSquare(3)) assert(areaOfSquare(3) == 9, "Test failed for areaOfSquare(3)") } areaOfSquare는 정사각형의 넓이를 구하는 함수이다.a를 매개변수로 받고 a와 a를 곱하여 정사각형의 넓이를 도출해..
-
스칼라에서 함수 정의하는 방법컴공지식/프로그래밍언어론 2024. 8. 31. 21:56
다음 예시를 통해 알아보자def add(x: Int, y: Int): Int = { x + y} def: 이건 함수 정의를 시작하는 키워드이다.여기서 add는 함수의 이름이다. 매개변수 목록: 소괄호 안에 함수가 받아들일 매개변수들을 정의한다.x와 y는 정수형(Int) 변수라는 뜻이다. 그 다음 나오는 Int는 함수의 반환 타입이다. = 기호: 함수의 본문이 시작된다는 표시다. 중괄호 {}: 함수의 본문을 감싸는 거다.이 예제에선 x + y를 더하는 기능을 하고 있다. 하지만 다음과 같이 작성할 수도 있다.def areaOfSquare(a: Int) = a * a이 코드는 정사각형의 넓이를 구하는 함수이다.근데 return 타입이 보이지 않는다.스칼라의 매력 중 하나가 바로 이거다.스칼라에서는 함수..
-
인터프리터와 컴파일러의 차이컴공지식/프로그래밍언어론 2024. 8. 31. 17:21
인터프리터는 프로그램의 소스 코드를 한 줄씩 읽고, 이를 즉시 실행하여 결과를 출력한다.프로그램 전체를 한 번에 번역하는 대신, 한 줄씩 해석하면서 실행하기 때문에 실행 속도가 느릴 수 있지만, 코드 작성 후 빠르게 테스트할 수 있다는 장점이 있다. 예시bash: 셸 스크립트를 실행할 때 사용되는 인터프리터python: 파이썬 언어로 작성된 코드를 한 줄씩 실행scala: Scala도 인터프리터 방식으로 실행할 수 있다. Search engine (Google, Naver,...): 검색 엔진도 일종의 인터프리터로 볼 수 있는데, 사용자가 입력한 검색어를 해석하고 이에 맞는 결과를 즉시 반환하기 때문이다. 이 부분은 약간의 비유적인 표현이다. 컴파일러는 프로그램의 소스 코드를 한 번에 읽어들여, 이를 기..
-
imread 함수컴공지식/컴퓨터비전 2024. 8. 31. 15:49
imread는 OpenCV에서 이미지를 파일에서 읽어올 때 사용하는 아주 기본적인 함수다.imread 함수는 지정된 파일로부터 이미지를 읽어들여 Mat 객체에 저장하는 역할을 한다.Mat 객체는 OpenCV에서 이미지 데이터를 저장하고 처리하는 데 사용되는 기본 데이터 구조다. imread 함수는 다음과 같은 시그니처를 가지고 있다.Mat imread( const string& filename, int flags = 1 ); const string& filename : 이 매개변수는 이미지 파일의 경로와 파일 이름을 나타낸다. 예를 들어 "lena.png" 또는 "C:/images/lena.png"처럼 파일의 경로와 이름을 문자열로 전달한다. int flags = 1: 이 매개변수는 이미지를 읽어올 때 ..