분류 전체보기
[Flutter] Riverpod 상태 관리
[Flutter] Riverpod 상태 관리
2023.06.24버튼을 누르는 등 특정 동작을 수행했을 때 다른 화면으로 이동하도록 설정할 때는 Navigator 객체를 사용한다. void _selectCategory(BuildContext context) { Navigator.of(context).push( MaterialPageRoute( builder: (ctx) => MealsScreen( title: "dd", meals: [], ), ) ); } Navigator.push 메서드로 새로운 라우트를 화면 스택의 맨 위에 추가하고 새로운 화면을 현재 화면 위에 띄운다. Navigator.pop 메서드로 화면 스택의 맨 위에 있는 라우트를 제거하고 이전 화면을 보여준다. push 메서드로 새로 띄운 화면은 안드로이드의 뒤로가기 버튼을 통해 제거할 수 있다. (p..
[Flutter] Theme와 세 가지 트리
[Flutter] Theme와 세 가지 트리
2023.06.19Theme 속성을 사용하면 애플리케이션 전체에서 사용될 테마를 지정할 수 있다. import 'package:flutter/material.dart'; import 'package:expense_tracker/widgets/expenses.dart'; // 공통으로 사용할 디자인 설정을 k로 시작하도록.. var kColorScheme = ColorScheme.fromSeed(seedColor: const Color.fromARGB(255, 96, 49, 181)); void main() { runApp( MaterialApp( theme: ThemeData().copyWith( useMaterial3: true, scaffoldBackgroundColor: Colors.deepPurpleAccent, ..
[Flutter] 여러 가지 화면과 사용자 입력 관리
[Flutter] 여러 가지 화면과 사용자 입력 관리
2023.06.17플러터에서 스크롤 기능을 구현할 때는 ListView 위젯을 사용한다. class ExpensesList extends StatelessWidget { const ExpensesList({super.key, required this.expenses}); final List expenses; @override Widget build(BuildContext context) { return ListView.builder( itemCount: expenses.length, itemBuilder: (ctx, index) => Text(expenses[index].title) ); } } 여러 개의 항목을 위젯으로 보여줄 때, 보여줄 항목이 많으면 Column 위젯보다는 ListView 위젯을 사용해 스크롤 할 수..
[Flutter] 위젯 렌더링과 다트 문법
[Flutter] 위젯 렌더링과 다트 문법
2023.06.16버튼을 눌렀을 때 다른 화면으로 라우팅 기능을 플러터에서 구현해보자. class Quiz extends StatefulWidget { const Quiz({super.key}); @override State createState() { return _QuizState(); } } class _QuizState extends State { Widget activeScreen = const StartScreen(); void switchScreen() { activeScreen = const QuestionsScreen(); } @override Widget build(context) { return MaterialApp( home: Scaffold( body: Container( decoration: co..
[Flutter] Dart 언어와 StatefulWidget
[Flutter] Dart 언어와 StatefulWidget
2023.06.14다트 언어는 자바처럼 객체지향 언어이자 Type-Safe 언어이다. 런타임 중에 타입 안정성을 확인하지만 타입 추론을 지정하기에 해당 변수가 처음 할당될 때 타입을 추론한다. 자바는 타입이 객체와 Primitive Type으로 나뉘지만, 다트는 모든 타입을 객체로 다룬다. 자바와 마찬가지로 다트도 모든 객체의 조상인 Object가 존재하고, int 같이 자바에서는 Primitive Type으로 다루던 타입도 객체로 다루기에 null로 입력될 수 있다. Scaffold 위젯을 생성할 때 파라미터로 몇 가지를 넘겨야 하는데, 위의 예시를 보면 Color? 을 파라미터로 넘긴다고 명시되어 있다. Color? 에서 Color는 타입이고, ? 는 null이 들어갈 수 있다는 의미이다. backgroundColor..
[Spring Basic] IoC와 DI 구조
[Spring Basic] IoC와 DI 구조
2023.06.14변경이 쉬운 코드를 작성하기 위해 Properties클래스를 사용한다. 여기서 Properties는 key - value 쌍으로 값을 저장하고, 타입은 을 사용한다. Properties클래스는 load메서드를 사용해 파일의 값을 읽어오거나 저장할 때 편리하게 사용될 수 있다. AppContext클래스를 사용해 여러 객체를 저장하는 저장소를 구현한다. 내부적으로 Map 자료구조를 가지고 있어 키 값을 통해 객체의 value를 얻도록 설계돼있다. 스프링은 자바 객체들을 빈으로 관리하고, 필요할 때 주입해주는 컨테이너이다. JavaBeans 기술은 원래 프론트엔드에서 GUI를 다룰 때 사용되는 기술이였지만 JavaFx로 업데이트하면서 자바로 GUI부분을 잘 사용하지 않게 되고 서버를 다루는데에 JavaBean..
[Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조
[Spring Basic] 웹 서버와 웹 애플리케이션 서버의 구조
2023.06.14클라이언트는 서비스를 요청하고, 서버는 서비스를 제공한다. 쉽게 생각하면 클라이언트는 우리가 사용하는 컴퓨터, 클라이언트 애플리케이션은 브라우저라고 할 수 있고, 서버를 처리하는 컴퓨터를 서버 컴퓨터, Tomcat을 서버 애플리케이션이라고 할 수 있다. 하나의 서버 컴퓨터에 여러 가지 서버가 모여있으면, 클라이언트가 제공하는 IP주소만으로는 어떤 서버에 대한 요청인지 구분할 수 없다. 때문에 포트번호가 필요하다. 여기서 포트번호는 서버를 구분할 때 사용한다. 간단하게 네트워크에 연결된 애플리케이션의 프로세스나 서비스를 구분하기 위한 식별자라고 생각하면 된다. 따라서 클라이언트는 서버에게 요청할 때 포트번호를 포함해서 요청해야 한다. ex. 123.45.1234:8082 (아이피 : 포트번호) / 웹 서버..
[Spring Basic] 예외처리
[Spring Basic] 예외처리
2023.06.13예외가 발생하고 처리해 주지 않으면 내부 서버 오류인 500번대 오류로 처리한다. 여러 가지 메서드들에 대해서 같은 에러가 발생함을 예상한다면, 각각의 메서드에다 try-catch문을 작성하는 대신 @ExceptionHandler 애너테이션을 사용해 예외를 따로 빼서 처리해 줄 수 있다. 이 때, 매개변수로는 처리할 예외가 들어간다. @ExceptionHandler 애너테이션으로 특정 예외를 처리하는 메서드를 지정할 수 있다. 예외를 처리하는 메서드는 여러 개가 있을 수 있고, 에러가 처리될 때는 작은 에러부터 시작해서 처리된다. NullPointerException은 Exception클래스의 자손이니, NullPointerException에러 메서드가 있다면 해당하는 에러를 먼저 찾은 후 없다면 그 조..
[HTTP] HTTP 쿠키와 세션
[HTTP] HTTP 쿠키와 세션
2023.06.12서로 간의 통신을 위한 약속을 프로토콜이라고 한다. 웹에서 프로토콜은 주고 받을 데이터에 대한 형식을 정의한 것으로 생각하면 된다. 데이터를 주고받을 때, 어떤 형식으로 주고받을지 미리 협의 해 놔야 통신이 가능하다. HTTP (Hyper Text Transfer Protocol) 도 프로토콜의 종류 중 하나다. 1. Stateless HTTP는 상태를 유지하지 않는다. 따라서 같은 클라이언트가 같은 요청을 서버에게 2번 보내도 서버는 같은 클라이언트로부터 도착한 요청임을 알 수 없다. 따라서 쿠키와 세션을 사용해 사용자를 구분한다. 쿠키는 클라이언트의 브라우저에서 관리되는 작은 데이터 파일이다. 서버는 HTTP 응답 메세지를 보낼 때 헤더에 Set-Cookie 필드를 생성해 쿠키를 설정한다. 클라이언트..
[Flutter] 프로젝트 구조와 Widget
[Flutter] 프로젝트 구조와 Widget
2023.06.11플러터는 다트 언어의 프레임워크로 다트 언어로 작성한 코드를 컴파일을 통해 각 플랫폼이 인식할 수 있는 네이티브 코드로 변환하고, (Android -> Dart VM IOS -> LLVM) 각 운영체제는 컴파일 된 네이티브 코드를 실행하게 된다. 안드로이드, iOS 같은 모바일 애플리케이션 뿐만 아니라 데스크탑 애플리케이션과 웹 애플리케이션도 플러터로 제작할 수 있지만, 모바일 애플리케이션 부분을 플러터가 가장 원활하게 지원하고 있다. 개발할 때 사용하는 IDE로는 vscode, Android Studio, IntelliJ 등 여러가지가 있다. .dart_tool : 다트와 플러터가 생성한 파일이 포함된다. 스프링의 .gradle 디렉토리와 비슷한 역할을 한다. .idea : 인텔리제이로 프로젝트 생성할..
[Java] 람다 표현식
[Java] 람다 표현식
2023.06.09코드를 간결하게 작성하고 중복을 최대한 피하기 위해 사용한다. 어떤 메서드를 구현한다고 해 보자. 확장성을 열어놓기 위해 특정 비즈니스 요구사항이 추가됐을 때 쉽게 수정하고 추가할 수 있어야 한다. 이를 위해 값을 메서드의 파라미터로 넘기는 것 보다 동작을 메서드의 파라미터로 넘기는 편이 합리적이다. package Parameter; public class Apple { private String color; priavet String weight; public Apple(String color, String weight) { this.color = color; this.weight = weight; } public String getColor() { return color; } public String..
[Spring 3.1] 스프링 MVC 애너테이션
[Spring 3.1] 스프링 MVC 애너테이션
2023.06.02@RequestMapping 스프링 MVC는 핸들러 매핑으로 메서드를 연결해준다. // 슬래시로 끝나지 않으면 hello.* hello/ 도 함께 매핑됨 @RequestMapping("/hello") public String hello() { ... } // @GetMapping을 이런식으로 구현 @RequestMapping(value = "/hello" method = RequestMethod.GET) public String hello() { ... } // 매핑에 요청 파라미터 지정 가능 @RequestMapping(value = "/hello" params="type=admin") public String hello() { ... } @RequestMapping(value = "/hello" pa..