ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java-28] 자바 method? func?
    Java 2020. 12. 19. 11:39

    Java Method Func?

    🐵 메소드

    메소드 vs 함수

    우리가 프로그래밍 언어를 배우면서 함수면 함수지 메소드라는 말은 많이 들어본적이 없을 거다. 또한 메소드와 함수는 엄밀히 말하면 서로 다른 의미 이므로, 이 점부터 집고 넘어가 보도록 하자.

    import Foundationn
    func length(value: String, value2 : String) -> Bool{
        return value1.characters.count < value2.characterrs.count
    }
    var test = Int(readLine()!)!
    public class A{
        int a;
        int b;
        public int sum(){
            return a+b;
        }
    }

    이런 코드가 있다고 가정해보자, 위에는 swift 언어로 작성한 코드이고, 밑에는 간단하게 자바로 작성한 코드이다. 이 둘은 뭐가 다를까?

    • 함수는 일정한 기능을 포함하고 있는 코드 블록이다.

      이게 무슨 말이냐면 함수 자체는 독립적인 코드 내에서 존재 가능 하다는 얘기이다. 그냥 코드를 작성하다가, 내가 필요한 기능들을 코드 내에서 어떠한 규약도 받지 않고 정의할 수 있다.

    • 그럼 자바는 함수가 아닌가?

      정확히 말하면 자바에서 정의한 함수라 말하는 메소드는 함수라고 하기에는 힘들다, 메소드라 함은, 특정 클래스 및 구조체에 종속되어 구현되어있는 '함수'를 메소드라고 얘기할 수 있겠다.
      이 함수와 메소드가 왜 중요할까? 개인적으로 자바8 이후로는 함수형 프로그래밍을 지원을 하게된다. 그런데, 당장 함수와 메소드를 구분하지 못해서 람다를 통한 함수구현 자바의 함수형 프로그래밍은 함수처럼 보이지만 함수는 아니다. 라는 말이 이해가 가지 않았기 때문이다. 밑에 자바로.구현한 익명 함수 이다.

         myList.stream() // 자바에서 구현한 StreamApi
                  .filter(s -> s.startsWith("c"))
                  .map(String::toUpperCase)
                  .forEach(System.out::println);
            Foo foo = System.out::println //자바에서 구현한 함수형 프로그래밍 (메소드 레퍼런스)

    사실 지금 보이는 함수를 선언하고, 메소드 레퍼런스로 깔끔하게 선언한 것처럼 보여서 함수다! 함수형 프로그래밍이다.! 라고 할 수 있지만 이를 까보면

    
         Foo foo = System.out::println //자바에서 구현한 함수형 프로그래밍 (메소드 레퍼런스)
    
       Foo foo = new Foo() { // 실제로는 메소드를 내부 클래스 내에서 구현중임
                @Override
                public void print(String s) {
                    System.out.println(s);
                }
            }

    결국 Foo 라는 interface 를 오버라이딩 하는 내부 익명 클래스 안에서 함수를 @Overridie 해서 구현하고 있다는 것이다. 엄밀히 말하면 자바의 함수형 프로그래밍은 함수는 아니다? 가 되는 걸 지도 모르겠다.

    댓글

Designed by Tistory.