241030
북클럽, 아티클 읽기
AI CCTV 카메라, 창업 7년 만에 5조 회사가 되었다.
Verkada
집을 리모델링 하면서 재미로 CCTV 카메라를 설치했어요. 기업용 카메라가 최고일 거라고 생각해서 샀는데, 생각보다 별로인 거예요. 거기서 단서를 얻었어요.
카메라 하드웨어는 빠르게 발전했지만, 클라우드나 AI를 활용하지는 못하고 있었던 거죠. 기회라고 봤어요.
돌이켜보면 타겟을 좁게 정하고 하나씩 뿌셔 나갔던 게 도움이 되었던 것 같아요. 학교, 병원, 체육관으로 하나씩 시장을 확장해 갔거든요. 미국에서는 학교 안전이 엄청 큰 이슈예요. 그게 Verkada에게는 기회가 되었어요.
하드웨어가 중심이었던 카메라 시장에서 소프트웨어 중심의 접근을 택한게 저희의 차별화 포인트가 되었어요.
고객과 대화하면 모든 경쟁사의 좋은 기능들이 다 있으면 좋겠다고 말해요. 하지만 실제로 그런 제품을 만들면 좋은 제품이 되지 않을 거예요.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# 객체 지향 프로그래밍과 Dart
1. 클래스 (Class)
객체 지향 프로그래밍 (Object-Oriented Programming) 의 핵심 개념이자 기본 단위
객체 (Object) 의 구조와 동작을 정의하는 틀
class [클래스 이름] { … }
class Person {
String name;
int age;
Person(this.name, this.age);
void introduce() {
print('안녕 ? 나는 $age살 $name !');
}
}
속성 : name, age
생성자 : Person(this.name, this.age);
메서드 : introduce()
클래스 가 여러 속성 과 메서드 를 하나로 묶은 친구라서 이 2가지로 구성되어 있다고 볼 수 있어요.
1-1. 속성 (Attribute)
인스턴스 변수 (Instance Variable)
지역 변수 (Local Variable)
정적 변수 (Static Variable)
인스턴스 변수 (Instance Variable)
객체 가 존재하는 동안 계속 메모리 상에 존재해요.
참고로, 메모리 상에 존재하는 기간을 생명 주기 (Life Cycle) 라고 해요 !
동일한 클래스 로 생성한 객체 들이어도 각 객체 들은 값을 공유하지 않고, 개별적인 값을 가져요.
지역 변수 (Local Variable)
로컬 변수 라고도 불러요.
특정 코드 블록 안에 선언된 변수
변수 가 선언된 코드 블록 안에서만 사용할 수 있어요.
변수 가 선언된 코드 블록의 실행이 끝나면 메모리 상에서 사라져요.
정적 변수 (Static Variable)
클래스 변수 라고도 불러요.
객체 에 종속되지 않고, 클래스 자체에 속하는 변수
객체 에 종속되지 않고, 클래스 자체에 속하는 변수
1-2. 메서드 (Method)
속성 과 메서드 는 클래스 안에 있는 요소라서 클래스 의 멤버 (Member) 라고 부르기도 해요 !
생성자 (Constructor) 라는 친구인데요 !
2. 상속 (Inheritance)
3. 객체 지향 프로그래밍 (Object-Oriented Programming)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[Dart 기초] 개인 과제 - 콘솔 쇼핑몰
1. Intro : 과제 시나리오
시나리오
아래의 기능이 들어있는 콘솔 프로그램 만들기
- 판매하는 상품 목록을 볼 수 있는 기능
- 구매자가 구매하고 싶은 상품들을 장바구니에 담을 수 있는 기능
- 구매자가 장바구니에 담은 상품들의 총 가격을 볼 수 있는 기능
2. Hint : 과제 요소
필수 정의
### **쇼핑몰**을 정의하기 위한 `ShoppingMall` 클래스
- **속성**
- 판매하는 상품 목록 (`List<Product>`)
- 장바구니에 담은 상품들의 총 가격 (`int`)
- **메서드**
- 상품 목록을 출력하는 메서드 (`showProducts()`)
- 상품을 장바구니에 담는 메서드 (`addToCart()`)
- 장바구니에 담은 상품의 총 가격을 출력하는 메서드 (`showTotal()`)
---
### **상품**을 정의하기 위한 `Product` 클래스
- **속성**
- 상품 이름 (`String`)
- 상품 1개당 가격 (`int`)
3. 필수 기능 가이드
3-1. 판매하는 상품 목록을 볼 수 있는 기능
**[ 설명 ]**
- `1` 을 입력했을 때 판매하고 있는 상품 목록을 출력합니다.
**[ 조건 ]**
- 출력 형태 : `[상품명] / [상품 1개당 가격]원`
```dart
셔츠 / 45000원
원피스 / 30000원
반팔티 / 35000원
반바지 / 38000원
양말 / 5000원
```
**[ 힌트 ]**
- 반복문을 통해 상품의 정보를 하나씩 출력합니다.
3-2. 상품을 장바구니에 담을 수 있는 기능
**[ 설명 ]**
- `2` 를 입력했을 때 장바구니에 담을 상품 이름 (`String`) 과 상품 개수 (`int`) 를 입력 받습니다.
**[ 조건 ]**
- 입력한 상품의 이름이 상품 목록에 있지 않거나 상품의 개수가 0 이하의 값이면 장바구니에 담기지 않습니다.
- 상품 목록에 없는 상품의 이름을 입력한 경우 `입력값이 올바르지 않아요 !` 를 출력합니다.
- 상품의 개수를 숫자 형태로 입력하지 않은 경우 `입력값이 올바르지 않아요 !` 를 출력합니다.
- 입력한 상품의 개수가 0 이하의 수인 경우 `0개보다 많은 개수의 상품만 담을 수 있어요 !` 를 출력합니다.
- 입력한 상품의 이름과 상품의 개수가 올바른 값이면 장바구니에 담깁니다.
- 이 경우 `장바구니에 상품이 담겼어요 !` 를 출력합니다.
**[ 힌트 ]**
- 조건문과 `try-catch` 문을 통해 입력값에 대한 처리를 할 수 있습니다.
- `contains()` 또는 고차 함수를 통해 입력한 상품의 이름이 상품 목록에 있는지 판별할 수 있습니다.
- `int.parse()` 를 통해 입력한 상품의 개수를 `int` 타입으로 변환할 수 있습니다.
- 장바구니에 담은 상품들의 총 가격을 담기 위한 인스턴스 변수를 `ShoppingMall` 클래스에 정의한 후 그 인스턴스 변수의 값에 더해줍니다.
3-3. 장바구니에 담은 상품들의 총 가격을 볼 수 있는 기능
[ 설명 ]
3 을 입력했을 때 구매자가 장바구니에 담은 상품들의 총 가격 (int) 을 계산하여 출력합니다.
[ 조건 ]
출력 형태 : 장바구니에 [가격]원 어치를 담으셨네요 !
장바구니에 35000원 어치를 담으셨네요 !
3-4. 쇼핑몰 프로그램을 종료할 수 있는 기능
**[ 설명 ]**
- `4` 를 입력했을 때 쇼핑몰 프로그램이 종료됩니다.
**[ 조건 ]**
- `이용해 주셔서 감사합니다 ~ 안녕히 가세요 !` 출력 후 프로그램을 종료합니다.
**[ 힌트 ]**
- `while` 문을 사용하고, 프로그램을 종료하기 위한 `bool` 타입의 변수로 `while` 문을 제어합니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
주의 사항
터미널이나 명령 프롬프트 등의 명령줄 인터페이스를 사용하여 구현합니다.
입력 받는 기능은 dart:io 라이브러리의 stdin.readLineSync() 를 사용합니다.
stdin.readLineSync() 는 입력한 값을 String? 타입의 값으로 반환하는 메서드입니다.
쇼핑몰에는 5개 이상의 상품이 있어야 하며, 생성자를 통해 생성합니다.
4 를 입력하기 전까지는 쇼핑몰의 3가지 기능을 계속 사용할 수 있어야 합니다.
1, 2, 3, 4 외의 값을 입력했을 때 지원하지 않는 기능입니다 ! 다시 시도해 주세요 .. 를 출력합니다.
1, 2, 3, 4 를 입력 받을 때 각 숫자가 어떤 기능을 하는지 출력합니다.
[1] 상품 목록 보기 / [2] 장바구니에 담기 / [3] 장바구니에 담긴 상품의 총 가격 보기 / [4] 프로그램 종료
'TIL' 카테고리의 다른 글
241104~08 WIL (5) | 2024.11.11 |
---|---|
241024~31 WIL (1) | 2024.10.31 |
241029 TIL (5) | 2024.10.29 |
241028 TIL (5) | 2024.10.28 |
241021~25 WIL (0) | 2024.10.25 |