반응형

ListView는 Flutter에서 스크롤 가능한 리스트를 만들기 위해 사용하는 위젯입니다. 많은 데이터 항목을 스크롤 가능한 리스트로 표시할 때 매우 유용합니다. ListView는 여러 종류가 있으며, 각각의 용도에 맞게 사용될 수 있습니다.

 

 

일반 리스트뷰 샘플

body: ListView(
  children: [
    Container(
      padding: const EdgeInsets.all(10),
      child: const Text(
          "title 1",
          style: TextStyle(
            fontSize: 30,
            fontWeight: FontWeight.bold
          ),
      ),
    ),
    Container(
      width: MediaQuery.of(context).size.width,
      height: 100,
      color: Colors.red,
    ),
    Container(
      padding: const EdgeInsets.all(10),
      child: const Text(
        "title 1",
        style: TextStyle(
            fontSize: 30,
            fontWeight: FontWeight.bold
        ),
      ),
    ),
    Container(
      width: MediaQuery.of(context).size.width,
      height: 100,
      color: Colors.red,
    ),
    Container(
      padding: const EdgeInsets.all(10),
      child: const Text(
        "title 1",
        style: TextStyle(
            fontSize: 30,
            fontWeight: FontWeight.bold
        ),
      ),
    ),
    Container(
      width: MediaQuery.of(context).size.width,
      height: 100,
      color: Colors.red,
    )
  ],
)

위와 같이 listview 의 children 에 여러개의 컴포넌트를 넣는다면 코드가 복잡해지기 때문에 하나의 컴포넌트로 만들필요가 있습니다. 

 

 

 

리스트 view 의 아이템을 컴포넌트 화 해보기

body: ListView(
  children: [
    postContainer(title: "title 1"),
    postContainer(title: "title 2", colorData: Colors.blue),
    postContainer(title: "title 3", colorData: Colors.green)
  ],
)
Widget postContainer({String title = '', Color colorData = Colors.red}) {
  return Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: [
      Container(
        padding: const EdgeInsets.all(10),
        child: Text(
          title,
          style: const TextStyle(
              fontSize: 30,
              fontWeight: FontWeight.bold
          ),
        ),
      ),
      Container(
        width: MediaQuery.of(context).size.width,
        height: 100,
        color: colorData,
      )
    ],
  );
}

 

title 과 color 를 변수로 사용할 수 있습니다. 

 

만약 가로 스크롤을 원한다면 scrollDirection 을 변경해주면 됩니다.

body: ListView(
  scrollDirection: Axis.horizontal,



ListView.Builder 

final postList = [
  {
    "title" : "Sample title 1" ,
    "color" : Colors.blue
  },
  {
    "title" : "Sample title 2" ,
    "color" : Colors.greenAccent
  },
  {
    "title" : "Sample title 3" ,
    "color" : Colors.lime
  },
  {
    "title" : "Sample title 4" ,
    "color" : Colors.blue
  },
  {
    "title" : "Sample title 5" ,
    "color" : Colors.green
  },
  {
    "title" : "Sample title 6" ,
    "color" : Colors.yellow
  },
  {
    "title" : "Sample title 7" ,
    "color" : Colors.red
  },
];

위와 같은 데이터가 선언되어 있을 때 ListView.builder 를 사용하여 쉽게 구현할 수 있습니다. 

itemCount 및 itemBuilder 속성을 통하여 list data 를 노출할 수 있습니다.

body: ListView.builder(
    itemCount: postList.length,
    itemBuilder: (BuildContext con, int index)  {
      return postContainer(
          title: postList[index]["title"] as String,
          colorData: postList[index]["color"] as Color
      );
    }
)

 


다른 예시

기본 ListView 

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Basic ListView'),
        ),
        body: ListView(
          padding: EdgeInsets.all(8.0),
          children: <Widget>[
            ListTile(
              title: Text('Item 1'),
            ),
            ListTile(
              title: Text('Item 2'),
            ),
            ListTile(
              title: Text('Item 3'),
            ),
          ],
        ),
      ),
    );
  }
}

 

ListView.builder

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ListView.builder Example'),
        ),
        body: ListView.builder(
          itemCount: 20,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text('Item $index'),
            );
          },
        ),
      ),
    );
  }
}

 

주요 속성

children: 리스트에 표시할 위젯 목록을 지정합니다 (ListView).

itemCount: 리스트 항목의 개수를 지정합니다 (ListView.builder, ListView.separated).

itemBuilder: 각 항목을 빌드하는 함수입니다 (ListView.builder, ListView.separated).

separatorBuilder: 항목 사이에 구분자를 빌드하는 함수입니다 (ListView.separated).

scrollDirection: 리스트의 스크롤 방향을 지정합니다. 기본값은 Axis.vertical입니다.

padding: 리스트의 패딩을 지정합니다.

reverse: 스크롤 방향을 반대로 설정할지 여부를 지정합니다. 기본값은 false입니다.



ListView 문서

 

ListView 클래스 문서

ListView.builder 클래스 문서

ListView.separated 클래스 문서

ListView.custom 클래스 문서

반응형
반응형

 

Flutter에서 클릭 이벤트를 처리하는 방법에는 여러 가지가 있습니다. 가장 일반적인 방법은 ElevatedButton과 같은 버튼 위젯을 사용하는 것이며, 보다 정밀한 제어가 필요할 때는 GestureDetector 위젯을 사용할 수 있습니다. 각각의 방법에 대해 설명하겠습니다.

 

1. ElevatedButton 클릭 이벤트

 

ElevatedButton은 Flutter에서 기본적으로 제공되는 버튼 위젯 중 하나입니다. 사용자가 버튼을 클릭했을 때 특정 동작을 수행하기 위해 onPressed 콜백을 정의합니다.

 

body: Center(
          child: ElevatedButton(
            onPressed: () {
              print('Button clicked!');
            },
            child: Text('Click Me'),
          ),
        ),

 

body: Center(
  child: TextButton(
    onPressed: () => print("버튼이 클릭되었습니다."),
    child: const Text("버튼"),
  ),
),

 

button 을 클릭해야지만 프린트 부분이 출력됩니다. 

 

 

2. GestureDetector 클릭 이벤트

 

GestureDetector 위젯은 더 정밀하게 제어할 수 있는 다양한 제스처 이벤트를 처리할 수 있습니다. 클릭(탭), 두 번 클릭, 길게 누르기 등 다양한 제스처를 처리할 수 있습니다.

body: Center(
  child: GestureDetector(
    onTap: () => print("gesture detect on tap"),
    child: Container(
      width: 200,
      height: 200,
      color: Colors.amber,
    ),
  ),
),

body: Center(
          child: GestureDetector(
            onTap: () {
              print('Container clicked!');
            },
            onDoubleTap: () {
              print('Container double-clicked!');
            },
            onLongPress: () {
              print('Container long-pressed!');
            },
            child: Container(
              width: 200,
              height: 200,
              color: Colors.blue,
              child: Center(
                child: Text(
                  'Tap me',
                  style: TextStyle(color: Colors.white, fontSize: 20),
                ),
              ),
            ),
          ),
        )

 

 

container 부분을 클릭해야지만 Print 가 출력이 됩니다. 

 

레퍼런스

 

ElevatedButton 문서

GestureDetector 문서

 

 

반응형
반응형

 

 

Stack 위젯은 Flutter에서 여러 자식 위젯을 서로 겹쳐서 배치할 수 있도록 하는 레이아웃 위젯입니다. Stack 위젯은 Positioned 위젯과 함께 사용하여 자식 위젯의 위치를 지정할 수 있으며, 이를 통해 복잡한 레이아웃을 쉽게 구성할 수 있습니다.

 

주요 속성

 

alignment: Stack 내에서 자식 위젯을 정렬하는 방법을 지정합니다. 기본값은 AlignmentDirectional.topStart입니다.

fit: 자식 위젯이 Stack의 크기에 어떻게 맞춰질지 지정합니다. StackFit.loose(기본값), StackFit.expand, StackFit.passthrough 등이 있습니다.

overflow: 자식 위젯이 Stack의 경계를 넘을 때 어떻게 처리할지 지정합니다. Overflow.clip(기본값), Overflow.visible 등이 있습니다.

 

주요 사용 사례

 

1. 단순 겹침

2. 정확한 위치 지정

 

body: Container(
  child: Stack(
    children: [
      Container(
        width: 150,
        height: 200,
        color: Colors.red,
      ),
      Container(
        width: 150,
        height: 200,
        margin: const EdgeInsets.only(top: 50, left: 50),
        color: Colors.blue,
      )
    ],
  ),
)

두번때 container 에 margin 을 위 50 좌 50 을 주는 코드입니다. 

stack 을 활용한 도형 겹치기 실습입니다. 

body: Container(
  width: MediaQuery.of(context).size.width,
  height: MediaQuery.of(context).size.height,
  color: Colors.yellow,
  child: Stack(
    children: [
      Container(
        width: 150,
        height: 200,
        color: Colors.red,
      ),
      Container(
        width: 150,
        height: 200,
        margin: const EdgeInsets.only(top: 50, left: 50),
        color: Colors.blue,
      ),
      Container(
        width: 150,
        height: 200,
        margin: const EdgeInsets.only(top: 100, left: 100),
        color: Colors.green,
      ),
      Container(
        width: 150,
        height: 200,
        margin: const EdgeInsets.only(top: 150, left: 150),
        color: Colors.orange,
      ),
    ],
  ),
)

 

positioned 위젯으로도 같은 내용을 표현 가능합니다.

Container(
  width: 150,
  height: 200,
  color: Colors.red,
),
Container(
  width: 150,
  height: 200,
  margin: const EdgeInsets.only(top: 50, left: 50),
  color: Colors.blue,
),
Positioned(
  left: 100,
  top: 100,
  // right: 10,
  // bottom: 10,
  child: Container(
    width: 150,
    height: 200,
    color: Colors.green,
  ),
),
Container(
  width: 150,
  height: 200,
  margin: const EdgeInsets.only(top: 150, left: 150),
  color: Colors.orange,
),

 

Stack 위젯 문서: https://api.flutter.dev/flutter/widgets/Stack-class.html

Positioned 위젯 문서: https://api.flutter.dev/flutter/widgets/Positioned-class.html

반응형
반응형

 

body 안에 컨테이너를 구성하겠습니다. 

 

세로로 가로세로 200px 박스를 구성해보겠습니다. 

Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const Text("안녕하세요"),
    ),
    body: Container(
      alignment: Alignment.center,
      child: Column(
        children: [
          Container(
            width: 200,
            height: 200,
            color: Colors.blue,
          ),
          Container(
            width: 200,
            height: 200,
            color: Colors.red,
          )
        ],
      ),
    ),
  );
}

 

결과물입니다. 

 

Column 을 Row 로 변경해주면 정렬이 가로로 변경됩니다.

body: Container(
  alignment: Alignment.center,
  child: Row(
    children: [
      Container(
        width: 200,
        height: 200,
        color: Colors.blue,
      ),
      Container(
        width: 200,
        height: 200,
        color: Colors.red,
      )
    ],
  ),
)

그리고 여기서 Row 에 우클릭 하게 되면 Show Context Actions 를 누르게 되면 더 할 수 있는 액션들이 나옵니다. 

한열에 여러개의 row(행) 를 추가하려면 어떻게 할까요? 

여기서 wrap with column 을 하게되면 아래와 같이 하나의 column 에 여러개의 row를 추가할 수 있게 children 이 생깁니다.

body: Container(
  alignment: Alignment.center,
  child: Column(
    children: [
      Row(
        children: [
          Container(
            width: 150,
            height: 200,
            color: Colors.blue,
          ),
          Container(
            width: 150,
            height: 200,
            color: Colors.red,
          )
        ],
      ),
    ],
  ),
)

하나의 줄이고 row 를 추가하게 되면

아래 코드처럼 row 를 추가합니다. 

body: Container(
  alignment: Alignment.center,
  child: Column(
    children: [
      Row(
        children: [
          Container(
            width: 150,
            height: 200,
            color: Colors.blue,
          ),
          Container(
            width: 150,
            height: 200,
            color: Colors.red,
          )
        ],
      ),
      Row(
        children: [
          Container(
            width: 150,
            height: 200,
            color: Colors.blue,
          ),
          Container(
            width: 150,
            height: 200,
            color: Colors.red,
          )
        ],
      ),
    ],
  ),

여기서 추가로 정렬에 대해서 말씀드리겠습니다.

child: Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [

column 에는 mainAxisAlignment 라는 속성이 있어서 해당 속성값을 center 로 해주면 세로(열) 정렬이 중앙이 됩니다.

column 클래스에 대해서 mainAxisAlignment 이기 때문에 세로(열) 정렬이고
row 클래스 내에서 mainAxisAlignment 인 경우 가로 정렬입니다. 

추가로 column 클래스의 crossAxisAlignment 는 가로(행) 정렬입니다. 

crossAxisAlignment: CrossAxisAlignment.center,

 

박스를 가운데로 정렬하는 코드는 아래와 같이 해주면 됩니다.

child: Column(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
           Row(
             mainAxisAlignment: MainAxisAlignment.center,
             ...
           ),
           Row(
             mainAxisAlignment: MainAxisAlignment.center,
             ...
           ),
           ]

여기서 만약 정렬이 아니라 어떤 기종이든 화면 가득 스크린을 채우고 싶다면 MediaQuery 를 이용하면 됩니다.

상자가 2개 이기 때문에 MediaQuery.size.width 에서 2를 나누면 두개의 container 가 화면을 가득채우게 됩니다. 

Row(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    Container(
      width: MediaQuery.of(context).size.width / 2,
      height: 200,
      color: Colors.blue,
    ),
    Container(
      width: MediaQuery.of(context).size.width / 2,
      height: 200,
      color: Colors.red,
    )
  ],

 

요약

 

ColumnRow를 사용하여 위젯을 세로 또는 가로로 정렬.

mainAxisAlignmentcrossAxisAlignment로 정렬 제어.

MediaQuery를 사용하여 화면 크기에 맞게 위젯 크기 조절 가능.

반응형
반응형

Flutter에서는 다양한 종류의 위젯을 제공하여 사용자 인터페이스를 구축할 수 있습니다. 주요 위젯들은 다음과 같은 범주로 나눌 수 있습니다.

1. 기본 위젯

Text

  • 설명: 텍스트를 화면에 표시하는 위젯.
  • 사용 예시:
     
Text('Hello, Flutter!')

Container

  • 설명: 레이아웃, 스타일, 배경색, 패딩 등을 조정할 수 있는 다목적 위젯.
  • 사용 예시:
     
Container(
  padding: EdgeInsets.all(16.0),
  color: Colors.blue,
  child: Text('Hello, Container!'),
)

레퍼런스: https://api.flutter.dev/flutter/widgets/Container-class.html

Column

Column( children: <Widget>[ Text('First Item'), Text('Second Item'), ], )

Row

Row( children: <Widget>[ Text('First Item'), Text('Second Item'), ], )

Image

Image.network('https://flutter.dev/images/flutter-logo-sharing.png')

Stack

 

2. 입력 위젯

TextField

TextField( decoration: InputDecoration( labelText: 'Enter your name', ), )

RaisedButton (Deprecated), ElevatedButton

ElevatedButton( onPressed: () {}, child: Text('Click Me'), )

Checkbox, Radio, Switch

Checkbox( value: true, onChanged: (bool? value) {}, )

3. 레이아웃 위젯

Padding

Padding( padding: EdgeInsets.all(16.0), child: Text('Padded Text'), )

Center

Center( child: Text('Centered Text'), )

Expanded

Row( children: <Widget>[ Expanded( child: Text('Expanded Text'), ), ], )

ListView

ListView( children: <Widget>[ ListTile(title: Text('Item 1')), ListTile(title: Text('Item 2')), ], )

4. 네비게이션 위젯

Navigator

Navigator.push( context, MaterialPageRoute(builder: (context) => SecondPage()), )

Drawer

Drawer( child: ListView( padding: EdgeInsets.zero, children: <Widget>[ DrawerHeader( child: Text('Drawer Header'), decoration: BoxDecoration( color: Colors.blue, ), ), ListTile( title: Text('Item 1'), onTap: () {}, ), ], ), )

5. 애니메이션 위젯

AnimatedContainer

AnimatedContainer( duration: Duration(seconds: 1), color: _color, child: FlutterLogo(size: 75), )

FadeTransition

FadeTransition( opacity: _animation, child: FlutterLogo(size: 100.0), )

 

머티리얼 디자인 위젯

a. Scaffold

b. AppBar

c. FloatingActionButton

 

 

레퍼런스

 

반응형

'프론트엔드 > Flutter' 카테고리의 다른 글

flutter stack 위젯  (2) 2024.07.16
flutter column row 테이블 구성  (0) 2024.07.16
flutter 개발 시 유용한 코드 스니펫  (0) 2024.07.15
dart 기본 문법  (0) 2024.07.14
flutter 앱 빌더 및 레퍼런스 모음  (0) 2024.07.14
반응형

Flutter 개발을 더 효율적으로 하기 위해 Android Studio나 Visual Studio Code에서 사용할 수 있는 유용한 약어(코드 스니펫)들이 많이 있습니다. 이러한 스니펫들은 코드를 빠르게 작성하고 오류를 줄이는 데 도움이 됩니다. 아래는 Flutter 개발 시 유용한 코드 스니펫과 약어 목록입니다.

 

1. stful: StatefulWidget 생성

stful

이 약어를 입력하면 StatefulWidget 클래스의 기본 구조가 자동으로 생성됩니다.

 

import 'package:flutter/material.dart';

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      // Your code here
    );
  }
}

2. stless: StatelessWidget 생성

 

stless

이 약어를 입력하면 StatelessWidget 클래스의 기본 구조가 자동으로 생성됩니다.

 

import 'package:flutter/material.dart';

class MyStatelessWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      // Your code here
    );
  }
}

3. initState: initState 메서드 생성

initState

State 클래스 내에서 initState 메서드를 빠르게 생성할 수 있습니다.

@override
void initState() {
  super.initState();
  // Your code here
}

4. build: build 메서드 생성

build

위젯의 build 메서드를 빠르게 생성할 수 있습니다.

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Title'),
    ),
    body: Center(
      child: Text('Hello, World!'),
    ),
  );
}

5. setState: setState 메서드 생성

setState
setState(() {
  // Your state change code here
});

 

IntelliJ IDEA 또는 Android Studio에서는 사용자 정의 코드 템플릿을 설정할 수 있습니다.

 

1. Preferences > Editor > Live Templates로 이동합니다.

2. Flutter 그룹을 선택하거나 새 그룹을 만듭니다.

3. 새 템플릿을 추가하고 약어와 템플릿 텍스트를 설정합니다.

예를 들어, stful 템플릿을 추가할 때:

 

Abbreviation: stful

Template text:

import 'package:flutter/material.dart';

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  @override
  Widget build(BuildContext context) {
    return Container(
      // Your code here
    );
  }
}

 

반응형
반응형

클라이언트-서버 모델 개요

클라이언트

  • 정의: 서비스를 요청하는 프로그램이나 장치.
  • 역할: 사용자 입력을 받아 서버에 요청을 보내고, 서버로부터 받은 응답을 사용자에게 제공.
  • : 웹 브라우저, 모바일 앱 등.
  • 웹 브라우저: 인터넷 웹사이트를 탐색하고 서버에서 웹 페이지를 요청하여 표시합니다.
  • 모바일 앱: 다양한 서비스를 제공하기 위해 서버에 요청을 보내고 응답을 받아 사용자에게 표시합니다.

 

서버

  • 정의: 클라이언트의 요청을 처리하고 응답을 제공하는 프로그램이나 장치.
  • 역할: 데이터베이스 조회, 비즈니스 로직 처리, 클라이언트에게 응답 제공.
  • : 웹 서버, 데이터베이스 서버, API 서버 등.
  • 웹 서버: 웹 페이지를 제공하고, HTTP 요청을 처리합니다.
  • 데이터베이스 서버: 데이터를 저장하고, 데이터베이스 쿼리를 처리합니다.
  • API 서버: 클라이언트 애플리케이션에 기능과 데이터를 제공하는 API를 제공합니다.

클라이언트가 서버에 요청하는 방식

서버에 요청하는 프로토콜에는 여러 가지가 있지만, 가장 일반적으로 사용되는 프로토콜은 HTTP/HTTPS입니다. 이 외에도 WebSocket, FTP, SMTP 등이 있습니다. 각 프로토콜은 특정한 용도와 방식으로 서버와 클라이언트 간의 통신을 지원합니다. 아래는 주요 프로토콜들에 대한 정리입니다.

 

1. HTTP/HTTPS

HTTP (HyperText Transfer Protocol)

  • 정의: 웹에서 클라이언트와 서버 간의 데이터 통신을 위해 사용되는 프로토콜.
  • 역할: 웹 페이지, 이미지, 동영상 등 다양한 데이터를 전송.
  • 특징:
    • 비연결성: 각 요청은 독립적이며, 요청 후 연결이 종료됨.
    • 무상태성: 각 요청 간에 상태 정보를 유지하지 않음.
  • 요청 메서드:
    • GET: 데이터를 요청.
    • POST: 데이터를 서버에 제출.
    • PUT: 데이터를 갱신.
    • DELETE: 데이터를 삭제.
    • PATCH: 데이터의 부분적 갱신.
    • OPTIONS: 지원하는 요청 메서드 확인.
GET /index.html HTTP/1.1
Host: www.example.com

 

2. WebSocket

WebSocket 프로토콜

  • 정의: 클라이언트와 서버 간의 양방향 통신을 위한 프로토콜.
  • 역할: 실시간 데이터 전송이 필요한 애플리케이션에서 사용.
  • 특징:
    • 양방향 통신: 클라이언트와 서버가 모두 메시지를 주고받을 수 있음.
    • 지속적인 연결: 연결이 유지되며, 지속적인 데이터 스트림이 가능.
// 클라이언트 측 JavaScript 예제
const socket = new WebSocket('ws://www.example.com/socketserver');

socket.onopen = function(event) {
  socket.send('Hello Server!');
};

socket.onmessage = function(event) {
  console.log('Message from server: ', event.data);
};

 

3. FTP

FTP (File Transfer Protocol)

  • 정의: 파일을 전송하기 위한 프로토콜.
  • 역할: 클라이언트와 서버 간의 파일 업로드 및 다운로드.
  • 특징:
    • 데이터 전송: 큰 파일의 전송에 최적화.
    • 인증: 사용자 이름과 비밀번호로 접근.
ftp ftp.example.com
Username: user
Password: pass

 

4. SMTP

SMTP (Simple Mail Transfer Protocol)

  • 정의: 이메일을 전송하기 위한 프로토콜.
  • 역할: 클라이언트에서 서버로, 서버에서 서버로 이메일 전송.
  • 특징:
    • 이메일 전송: 주로 이메일 클라이언트와 서버 간의 통신.
    • 텍스트 기반: 간단한 텍스트 명령어로 구성.
  • SMTP 예제:
HELO example.com
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject: Test mail
This is a test email.
.
QUIT

 

 

  • HTTP/HTTPS: 웹에서 가장 널리 사용되는 프로토콜로, 웹 페이지와 데이터를 전송.
  • WebSocket: 실시간 양방향 통신을 지원하는 프로토콜로, 채팅 애플리케이션 등에 사용.
  • FTP: 파일 전송에 특화된 프로토콜로, 대용량 파일 전송에 적합.
  • SMTP: 이메일 전송을 위한 프로토콜로, 이메일 클라이언트와 서버 간의 통신을 지원.
  • RESTful API: 리소스 기반의 API 설계 아키텍처로, HTTP 메서드를 통해 자원에 접근.

 

반응형
반응형

 

1. 변수

변수 선언

Dart에서는 변수 선언 시 var, final, const 키워드를 사용합니다.

  • var: 타입을 명시하지 않고 변수 선언 시 사용하며, 초기화 시 타입이 결정됩니다.
  • final: 한 번 할당되면 변경할 수 없는 변수입니다.
  • const: 컴파일 타임 상수로, 한 번 할당되면 변경할 수 없습니다.
var name = 'Bob'; // 타입 추론
String name = 'Bob'; // 명시적 타입 선언
final name = 'Bob'; // 한 번만 할당 가능
const pi = 3.14; // 컴파일 타임 상수

데이터 타입

 

 

Null safety

String? nullableName; // null 가능
String nonNullableName = 'Bob'; // null 불가능

 

데이터 타입

  • 기본 데이터 타입:

Dart는 정적 타입 언어로, 기본 데이터 타입이 있습니다.

  • int: 정수 타입
  • double: 부동 소수점 타입
  • String: 문자열 타입
  • bool: 논리 타입
  • List: 배열 타입
  • Map: 키-값 쌍 타입
int number = 42;
double height = 1.75;
String greeting = 'Hello, Dart!';
bool isVisible = true;
List<int> numbers = [1, 2, 3, 4];
Map<String, int> ages = {'John': 30, 'Jane': 25};

컬렉션

List<int> numbers = [1, 2, 3];
Set<String> uniqueNames = {'Alice', 'Bob', 'Charlie'};
Map<String, int> scores = {'Alice': 90, 'Bob': 85};
 

함수

  • 함수 선언과 사용
int add(int a, int b) {
  return a + b;
}

// 화살표 함수
int multiply(int a, int b) => a * b;

// 선택적 매개변수
void greet(String name, {String? greeting}) {
  print('${greeting ?? 'Hello'}, $name!');
}

// 기본값 매개변수
void introduce(String name, {int age = 30}) {
  print('$name is $age years old.');
}

 

객체 지향 프로그래밍 개념

  • 클래스와 객체:

Dart는 객체 지향 언어로, 클래스와 객체를 지원합니다.

클래스는 객체의 청사진이며, 객체는 클래스의 인스턴스입니다.

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void introduce() {
    print('My name is $name and I am $age years old.');
  }
}

var person = Person('Alice', 25);
person.introduce();

상속

Dart에서는 상속을 통해 클래스를 확장할 수 있습니다.

class Student extends Person {
  String school;

  Student(String name, int age, this.school) : super(name, age);

  @override
  void introduce() {
    super.introduce();
    print('I study at $school.');
  }
}

인터페이스와 추상 클래스:

추상 클래스는 직접 인스턴스를 생성할 수 없으며, 다른 클래스가 이를 상속받아 구현해야 합니다.

abstract class Shape {
  double getArea();
}

class Circle implements Shape {
  double radius;

  Circle(this.radius);

  @override
  double getArea() => 3.14 * radius * radius;
}

믹스인

mixin Logger {
  void log(String message) {
    print('LOG: $message');
  }
}

class LoggableStudent extends Student with Logger {
  LoggableStudent(String name, int age, String school) : super(name, age, school);

  void study() {
    log('Studying...');
  }
}

 

 

요약

  • 변수와 데이터 타입: var, final, const 키워드를 사용하여 변수를 선언하며, 기본 데이터 타입으로 int, double, String, bool, List, Map 등이 있습니다.
  • 함수: Dart에서는 함수도 객체로 취급되며, 다양한 방법으로 함수를 선언하고 사용할 수 있습니다.
  • 객체 지향 프로그래밍: 클래스와 객체를 사용하며, 상속, 추상 클래스, 인터페이스, 믹스인 등 객체 지향 개념을 지원합니다.

 

 

  1. Dart 공식 웹사이트
    • URL: https://dart.dev
    • 이 사이트는 Dart에 대한 모든 정보의 중심지입니다.
  2. Dart 언어 투어
  3. Dart 프로그래밍 언어 명세
  4. Dart API 참조
  5. Dart 패키지
    • URL: https://pub.dev
    • Dart와 Flutter 패키지의 공식 저장소입니다.
  6. DartPad
    • URL: https://dartpad.dev
    • 브라우저에서 직접 Dart 코드를 작성하고 실행해볼 수 있는 온라인 도구입니다.
  7. Dart 튜토리얼
  8. Effective Dart
반응형

+ Recent posts