ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • scala 기본(클래스)
    카테고리 없음 2023. 4. 18. 12:31

    스칼라

    1. 변수
    2. 함수
    이번엔 클래스에 대해 알아보자. 일단 클래스의 기본형태를 보자
    class MyClass {
    
    }
    
    요거다. 자바랑 비슷하다. 그럼 상세하게 더 보자.
    class MyClass(id: Long, name: String) {
    
      def this(id:Long) = this(id,"No name")
    
      def getName = name
    
      def getId = id
    
      override def toString = s"id = $id name = $name"
    }
    
    보자 흠.. 일단 MyClass옆에 있는저건 생성자다. 저렇게 클래스 생성할 수 있다. 그리고 그 밑은 id만 있는 생성자다. 보조 생성자? 그리고 그 밑은 흔히 말하는 getter 일반적은 function이다. 그리고 자바와 다른점은 override 어노테이션이 아니라 예약어 인듯하다. 그럼 한번 클래스를 생성해보자.
    val myClass = new MyClass(1L,"wonwoo")
    println(myClass)
    println(myClass.getName)
    
    id = 1 name = wonwoo
    wonwoo
    
    다음 소스도 보자
    class MyClass(val id: Long, val name: String) {
    
      private val number = 1000
    
      def this(id:Long) = this(id,"No name")
    
      def getName = name
    
      def getId = id
    
      def getNumber = number
    
      def setNumber(number:Int) = this.number = number
    
      override def toString = s"id = $id name = $name"
    }
    
    자바와 마찬가지로 private 으로 접근제어도 가능하다. 그리고 number는 val이 때문에 setNumber 컴파일 에러가 날것이다. 앞서 설명 했듯이 val는 자바의 final이라 생각하면 빠르다. 자바 개발자를 위한 스칼라 공부인듯 하네.. 아 저기 보인 toString 함수를 보자. 우리가 자바를 사용할때 불편점이 있었다. 위와 같은 코드를 만들때 "id = " + id + "name = " + name 이런식을 만들었다. 보기만 해도 불편하다. 불편한 것도 있지만 자바에서 저코드는 비효율적이다. 물론 저렇게 몇개 안되는 연산은 상관없지만 많은 연산을 할 경우 String을 계속 생성하기 때문에 메모리상 비효율적이다. 그건 그렇고 일단 보기에도 불편하다. 하지만 스칼라는 앞에 s만 붙이고 나면 효율적으로 이어 나갈 수 있다. 간편해서 좋다. 클래스이야기 하다 삼천포로 빠졌네. 다시 class 로 가자
    class Animal(var name: String) {
    
      def getName = name
    
      override def toString = s"name is $name"
    }
    
    class Dog(name: String, sound: String) extends Animal(name: String) {
    
      def getSound = sound
    
      override def toString = s"my name is $name and sound $sound"
    }
    
    상속이다. 객체지향언어라면 상속이 있다. 스칼라도 있다. 개념은 자바와 같다. 자바 개발자라면 생성자를 만드는게 약간 어색하지만 그래도 이해는 된다. 마찬가지로 추상클래스도 있다.
    abstract class Pizza{
    
      def order
    
      def orderPizza = {
        order
        prepare
        bake
      }
      def prepare = println("prepare")
    
      def bake = println("bake")
    }
    
    class ChicagoPizza extends Pizza{
      override def order: Unit = println("ChicagoPizza")
    }
    
    class LAPizza extends Pizza {
      override def order: Unit = println("LAPizza")
    }
    
    간단하게 만들어봤다. 개념은 자바와 동일한듯 하다. abstract 메소드만 필수적으로 구현 해주면 된다. 클래스 자체는 어렵지 않은 듯 하다. 자바와 비슷하기 때문에 그렇게 어렵게 느껴지짆 않는다. 다음 시간에 스칼라의 인터페이스라 불리는 trait에 대해 알아보자 시간이 되면 class도 더 알아볼 예정이다.

    댓글

Designed by Tistory.