Class 와 function

wonyoung·2024년 1월 31일

Find out

목록 보기
1/9

JavaScript에서의 함수(Function)와 클래스(Class)는 서로 다른 구문과 개념을 가지고 있으며, 각각의 장단점과 사용 상황이 있습니다.

함수(Function)

함수는 JavaScript에서 가장 기본적인 작업 단위입니다. 하나의 작업이나 계산을 수행하는 코드 블럭입니다.

장점

  • 간결성: 작은 작업을 수행하는 경우, 함수는 간단하고 명료하게 사용할 수 있습니다.
  • 재사용성: 한 번 정의된 함수는 여러 곳에서 재사용할 수 있습니다.
  • 스코프 제어: 함수는 자체 스코프를 가지며, 이를 통해 변수를 캡슐화하고 충돌을 방지할 수 있습니다.

단점

  • 구조화: 복잡한 작업을 수행할 때, 함수만으로는 코드의 구조화가 어려울 수 있습니다.
  • 메모리 사용: 동일한 함수가 여러 번 사용될 때, 각 인스턴스는 메모리 상에 별도로 존재합니다.

클래스(Class)

ES6부터 JavaScript에 도입된 클래스는 객체 지향 프로그래밍의 기본을 형성합니다. 클래스는 객체의 설계도 역할을 하며, 상속, 캡슐화, 다형성 등의 객체 지향 개념을 지원합니다.

장점

  • 구조화와 조직화: 클래스는 복잡한 코드를 구조화하고 조직화하는 데 유리합니다.
  • 상속: 클래스를 통해 코드 재사용성을 높일 수 있습니다. 하위 클래스가 상위 클래스의 속성과 메소드를 상속받을 수 있습니다.
  • 캡슐화: 클래스는 데이터(속성)과 그 데이터를 조작하는 메소드를 하나의 단위로 묶어 관리할 수 있습니다.

단점

  • 복잡성: 간단한 기능을 구현할 때 클래스를 사용하는 것은 과도한 구조일 수 있습니다.
  • 메모리 사용: 클래스의 인스턴스는 각각 별도의 메모리 공간을 차지합니다.
    차이점
  • 문법과 개념: 함수는 단순한 코드 블럭으로 특정 작업을 수행하지만, 클래스는 객체 지향 프로그래밍의 개념을 따릅니다.
  • 재사용성: 함수는 코드 재사용을 위한 기본 단위입니다. 반면, 클래스는 재사용성을 더욱 확장하여, 상속을 통해 기능을 확장하고, 새로운 객체를 생성할 수 있습니다.
  • 스코프와 캡슐화: 함수는 자체 스코프를 가지며 변수를 캡슐화합니다. 클래스는 캡슐화를 더욱 확장하여, 데이터와 데이터를 조작하는 메소드를 하나의 단위로 묶습니다.

함수와 클래스의 선택은 프로젝트의 요구사항, 코드의 복잡성, 개발자의 선호도에 따라 달라질 수 있습니다. 간단한 작업을 수행하는 경우에는 함수가 더 적합할 수 있고, 복잡한 시스템을 구축할 때는 클래스의 구조화된 접근 방식이 더 유리할 수 있습니다.


React에서는 클래스 기반 컴포넌트가 초기에는 널리 사용되었지만, 최근에는 함수형 컴포넌트와 훅(Hooks)이 주류가 되면서 클래스 기반 컴포넌트의 사용이 감소했습니다. 이러한 변화는 여러 이유로 인해 발생했습니다:

  • 훅(Hooks)의 도입: React 16.8에서 도입된 훅은 함수형 컴포넌트에서 상태 관리, 라이프사이클 기능, 그리고 기타 React의 기능들을 사용할 수 있게 해주어, 클래스 컴포넌트의 필요성을 대체했습니다.

  • 간결성과 읽기 쉬움: 함수형 컴포넌트는 클래스 기반 컴포넌트에 비해 문법이 더 간결하며, 이해하기 쉽습니다. 특히 훅을 사용하면 복잡한 라이프사이클 로직을 더 간단하고 명확하게 표현할 수 있습니다.

  • 재사용성과 조합성: 커스텀 훅을 만들어 로직을 재사용하고 조합할 수 있어, 컴포넌트 간에 상태 로직을 쉽게 공유할 수 있습니다.

  • 성능 최적화: 함수형 컴포넌트와 훅은 클래스 컴포넌트에 비해 메모리 자원을 덜 사용하며, 성능 최적화에 있어서도 이점을 제공합니다.

그럼에도 불구하고, 클래스 기반 컴포넌트는 여전히 유효하며, 기존의 프로젝트나 특정 상황에서는 여전히 사용될 수 있습니다. React는 클래스 컴포넌트를 계속 지원할 예정이지만, 새로운 기능은 주로 함수형 컴포넌트와 훅을 중심으로 추가될 것으로 예상됩니다.

따라서, 새로운 React 프로젝트를 시작하거나, React를 배우는 중이라면, 함수형 컴포넌트와 훅에 더 익숙해지는 것이 좋습니다.

profile
😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀

0개의 댓글