🌈 Programming
[Laravel] .env 파일 설정으로 개발용, 서비스용 URL 나누기
🤔 작성 계기 이번에 회사에서 앱을 리뉴얼하게 되어 해당 앱의 전반적인 API 작업을 맡게 되었다. 그리고 바로 어제 앱이 무사히 서비스되어 오늘은 위 프로젝트의 개발 서버를 세팅하였는데 3개월 전의 무지한 내가 이미지 링크를 전부 하드 코딩으로 써 부린 게 아닌가! 덕분에 개발용으로 API를 던지면 이미지를 불러오지 못하는 현상이 발생해 부랴부랴 코드를 개선하고, 남은 시간에 이 글의 작성하게 되었다. 📖 .env 파일에 정의된 환경 변수를 컨트롤러에서 사용하는 방법 .env 파일에서 APP_URL 값을 확인합니다. 일반적으로 .env 파일은 프로젝트 루트 디렉터리에 위치합니다. 컨트롤러에서 config() 헬퍼 함수를 사용하여 .env 파일에 정의된 변수에 접근할 수 있습니다. config() 함수는..
[Flutter] 단일 박스(Container) 위젯 작성
📚 Container, SizedBox, Center 1. Center child 를 가운데 배치합니다. const Center( child: Text('Flutter My Home Page'); ) 2. Containsar child 레이아웃의 위젯 class MyHomePage extends StatelessWidget { const MyHomePage({ Key? key, }) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Center(child: const Text('Flutter My App Bar')), ), body: Container( color: ..
[Fltutter] MaterialApp, Text, Scaffold, Appbar
📚 화면 레이아웃 구성 위젯 1. MaterialApp 안드로이드 native setting 빌드 시에 필요한 파일들과 코드들이 생성됩니다. 2. Text 텍스트를 출력해주는 위젯 3. Scaffold 머터리얼 스타일 디자인의 레이아웃 구조물 4. Appbar 상단 네비게이션바를 출력해주는 위젯 📢 모든 화면을 이루는 요소를 위젯(Widget)이라고 표현합니다! Text, Scaffold, AppBar ...등 모든 화면의 구성요소를 위젯 이라고 부릅니다. 📍 예제 void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widge..
[Flutter] 플러터 프로젝트 구조 이해하기
📚 폴더 구조 프로젝트를 만들면 이 안에 프로젝트 파일들이 자동으로 생성됩니다. 샘플 앱이 함께 생성 되기 때문에 코드 작업을 하지 않아도 하나의 앱이 만들어집니다. 📍 /android : 안드로이드 native setting 빌드 시에 필요한 파일들과 코드들이 생성됩니다. 📍 /ios : ios native setting iOS 빌드 시에 필요한 파일들과 코드들이 생성됩니다. 📍 /lib : 대부분의 코드가 작성되는 위치로 어플리케이션에 대한 UI 와 서비스 로직을 담는 폴더입니다. 📍 pubspec.yaml : 플러터 프로젝트의 중심 같은 파일로, 앱 이름, 버전, 빌드, 의존성 (dependencies), 리소스 (이미지, 폰트 파일 등) 등이 모두 등록되어 있는 파일입니다.
[Dart] 상속과 Super, Override
📚 상속 📍 개념 부모의 상태(field)와 행위(function)을 물려 받는 것을 의미합니다. • 부모 클래스와 자식 클래스가 있습니다. • 상속은 부모 클래스에서 진행됩니다. 부모 클래스가 갖고 있는 변수와 함수는 자식이 사용할 수 있습니다. 하지만 자식 클래스가 가지고 있는 변수와 함수는 부모가 가질 수 없습니다. 📍 예제 1 사람 클래스가 있습니다. class Person { } 이 사람 클래스는 이름을 가졌고 말을 하며 걸을 수 있습니다. class Person { Person({ required this.name, }); final String name; void speak() { print('안녕하세요 저는 $name입니다.'); } void walk() { print(..
[Dart] Getter, Setter, 접근 제한자
🌟 접근 제한자 1. 정의 함수나 필드(변수) 접근을 제한할 수 있습니다. • 기본적으로 다른 파일에서 import만 받으면 public 하게 접근이 가능합니다. • private 로 접근을 제한 했을 경우, 파일 내부에서만 접근이 가능합니다. 2. private 선언 방법 필드와 함수 모두 이름 앞에 _ 을 입력해주면 됩니다. class Student { String? _name; } 🌟 Getter 1. 선언 방법 타입 get 게터명 { return 게터 반환 값 } 단순히 반환값만 작성할 경우 아래와 같이 람다식 함수로 표현할 수 있습니다. 타입 get 게터명 => 게터반환값 2. 예제 class Student { String? name; int? _age = 0; int? get age => _a..
[Dart] 클래스 생성자(Class Constructor)
🔎 생성자(Constructor) 📍 정의 클래스(Class)는 객체 지향 프로그래밍(OOP)에서 객체(object)를 생성하기 위해 정의하는 일종의 틀입니다. void main() { print('class 공부'); // 인스턴스(instance) : 객체(object) 생성 // Student 타입의 firlStudent 변수 생성 // Student girlStudent = Student('오냥', 10); Student girlStudent = Student(name: '오냥', age: 10); girlStudent.printTinfo(); // 생성자는 생성을 할 때만 적용 // 생성 시 입력 받은 '오냥'은 '학생'이 ..
[Dart] 클래스(Class) 선언과 인스턴스(Instance)
🔎 클래스(Class) 📍 정의 클래스(Class)는 객체 지향 프로그래밍(OOP)에서 객체(object)를 생성하기 위해 정의하는 일종의 틀입니다. class 는 변수와 함수를 정의할 수 있습니다. 비슷한 성격을 가진 연관있는 변수와 함수들을 한 class에 정의합니다. 📍 작성방법 클래스명의 앞글자는 대문자로 시작해야 합니다. // class 클래스명 {} class Student { String name = 'ohmyo'; // 초기값 할당 int? age; // null을 허용 void printTinfo() { print('----------------'); print('name: $name'); print('age: $age'); pri..
[Dart] 객체 다루기 Map 타입
🔎 Map 📍 특징 • key, value pair(한쌍) 이뤄진 자료 구조 • key 값이 중복 X 📍 사용방법 void main() { // map 선언 방법1 Map joinInputForm = { 'name': 'ohmyo', 'age': 5, 'list': [true, true, true], 'phone': '010-0000-0000', }; print(joinInputForm['name']); // ohmyo // 선언 방법2 Map map = {}; print(map); // {} // key 값 할당 // key 값 없다? = insert map['name'] = 'oh..
[Dart] 열거형 변수(List, Set)와 제네릭(Generic)
🔎 열거형 변수 📍 List 특징 • List 는 여러가지를 담을 수 있는 값입니다. • List 는 순서가 보장됩니다. • .add() 를 이용해 값을 추가할 수 있습니다. • .addAll() 를 이용해 여러개의 값을 추가할 수 있습니다. • .length 를 이용해 리스트의 길이값을 구할 수 있습니다. void main() { // List 선언 방법 List list = []; print(list); // [] list.add('a'); // a 추가 list.add('b'); // b 추가 print(list); // [a, b] // list 길이값 .length print(list.length); // 2 print(list[0]); // a // list 안에 값을 get (index 기반..