컴공지식/프로그래밍언어론
-
OOP(객체 지향 프로그래밍)에서의 병렬 처리와 멀티스레딩컴공지식/프로그래밍언어론 2024. 9. 2. 23:48
요리사가 동시에 여러 재료를 가공하는 상황이다. 일반적으로, OOP의 요리사(객체) 는 하나의 작업에 집중한다.예를 들어, 파스타 요리사는 먼저 면을 끓이고, 그 다음에 소스를 준비하고, 마지막으로 접시에 담아 서빙한다.이 과정은 순차적으로 진행되며, 한 번에 한 가지의 일을 한다. 근데 주방이 바빠지고, 손님 주문이 몰려들어 한 명의 요리사가 여러 재료를 동시에 가공해야 하는 상황이 발생할 수 있다.예를 들어, 파스타 요리사는 동시에 면을 끓이면서 소스도 준비해야 하고, 한편으로는 샐러드 채소도 씻어야 할 수 있다. 이 상황은 OOP에서 병렬 처리 또는 멀티스레딩으로 비유할 수 있다! 병렬 처리(Parallel Processing)는 주방에서 여러 요리사가 동시에 여러 재료를 가공하는 것과 같다.프로그..
-
프로그래밍 패러다임컴공지식/프로그래밍언어론 2024. 9. 2. 23:37
객체 지향 프로그래밍(Object-Oriented Programming, OOP)과 함수형 프로그래밍(Functional Programming, FP)을 비교해보자 객체 지향 프로그래밍은 클래스와 객체의 개념을 중심으로 코드가 작성된다.클래스는 객체를 생성하는 청사진으로 사용되고, 클래스 내에는 속성과 메서드가 포함된다.OOP의 주요 특징은 상속, 다형성, 캡슐화, 추상화다.예를 들어, KitKat이라는 클래스가 Food 클래스를 상속받아 확장될 수 있다.OOP는 코드 재사용성과 유지보수성이 높지만, 보일러플레이트 코드가 많아 코드가 길어질 수 있다. 객체 지향 프로그래밍을 공장으로 비유해보겠다.이 공장은 각 작업자가 명확한 역할을 가지고 있으며, 서로 협력해서 결과물을 만들어내는 구조로 설명된다.각 ..
-
테스트 주도 개발(TDD, Test-Driven Development)컴공지식/프로그래밍언어론 2024. 8. 31. 23:25
TDD는 소프트웨어 개발 방법론 중 하나로, 테스트를 먼저 작성한 후 그 테스트를 통과할 수 있는 코드를 작성하는 방식이다.이 방법론은 코드의 품질을 높이고, 버그를 줄이는 데 아주 효과적이다. TDD의 첫 번째 단계는, 구현할 기능을 테스트하는 테스트 케이스를 작성하는 거다.테스트는 코드가 올바르게 작동하는지 확인하기 위한 명확한 기준이 된다.예를 들어, 정사각형의 넓이를 구하는 함수를 작성할 때, 4를 입력하면 16이 반환되어야 한다는 테스트 케이스를 먼저 작성하는 거다. 그리고 그 테스트를 통과할 수 있는 가장 간단한 코드를 작성한다.코드가 복잡할 필요는 없어, 오직 테스트를 통과하는 것만 목표로 한다.예를 들어, 아까 말한 테스트 케이스를 통과하기 위해 a * a처럼 간단한 코드를 작성하는 거다...
-
어떻게 함수를 설계할까컴공지식/프로그래밍언어론 2024. 8. 31. 23:22
계약(Contract): 함수의 입력과 출력의 타입을 정의.목적(Purpose): 함수가 하는 일을 설명.테스트(Tests): 함수가 올바르게 동작하는지 확인.헤더(Header): 함수의 정의와 매개변수, 반환 타입을 명시.본문(Body): 함수의 실제 동작을 구현. 다음을 모두 만족시키도록 함수를 설계하자.예를 들어 정사각형의 넓이를 구하는 함수를 설계한다고 해보자. 계약 단계에서 입력으로는 정사각형의 한 변의 길이인 정수 타입 a를 정의하고 정수 타입 넓이인 w를 정의하고목적으로는 정사각형의 넓이를 구한다고 할 수 있다.테스트로는 4를 넣으면 16이 반환되는지 테스트 해볼 수 있다.헤더에는 areaOfSquare이라고 함수를 정의하고 매개 변수로는 a, 그리고 반환타입으로는 정수형인 Int를 붙일 수..
-
패턴 매칭 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를 곱하여 정사각형의 넓이를 도출해..