우리가 하는 프로젝트에서는 굳이 싱글턴으로 할필요 없음
사용양이 많을수록 싱글턴이 유리
싱글턴은 나 자체를 변수로 가지고 있음 private으로
객체 취득용& 생성용 메소드 만들어줘야함
// 객체 취득용, 생성용 메소드
public static SingletonTest getInstance() {
// 객체 존재 여부 확인
if (instance == null) { // 객체 없으면...
instance = new SingletonTest();
}
// 겍체 주소 반환
return instance;
}
모의주식
service 부분만
package com.goodee.test.service;
import java.util.Scanner;
public class StockService {
String[] corp = {"샘성", "까까오", "웹플릭스"};
int[] price = {100, 80, 150};
float[] updown = {0, 0, 0};
int[] stock = {0, 0, 0};
int money = 500;
int day = 1;
Scanner sc = new Scanner(System.in);
boolean rFlag = true;
float buyP = 0.01f;
float sellP = 0.04f;
public void run() {
while(rFlag) {
marketShow();
System.out.println("메뉴를 입력하여 주세요.");
System.out.println("1.구매 2.판매 3.다음날 9.종료");
switch(sc.nextLine()) {
case "1" : buyStock();
break;
case "2" : sellStock();
break;
case "3" : nextTime();
break;
case "9" : System.out.println("종료합니다.");
rFlag = false;
break;
default : System.out.println("잘못 입력하셨습니다.");
}
}
}
public void marketShow() {
System.out.println("---------------------");
System.out.println(day + "일 시세. 보유금 :" + money + "원");
System.out.println("---------------------");
System.out.println("종목명\t금액\t등락률");
System.out.println("---------------------");
for(int i = 0 ; i < corp.length ; i++) {
System.out.println(corp[i] + "\t" + price[i] + "\t" + updown[i] + "%");
}
System.out.println("---------------------");
}
public void updown() {
for(int i = 0 ; i < corp.length ; i++) {
float num = ((float) Math.floor(Math.random() * 101) + -50) / 10;
price[i] = (int) (price[i] + Math.round(price[i] * num / 100));
if(price[i] < 0) {
price[i] = 0;
}
updown[i] = num;
}
}
public void nextTime() {
day++;
updown();
}
public void buyStock() {
System.out.println("---------------------------");
System.out.println(day + "일 시세. 보유금 :" + money + "원");
System.out.println("---------------------------");
System.out.println("번호\t종목명\t금액\t보유수량");
System.out.println("---------------------------");
for(int i = 0 ; i < corp.length ; i++) {
System.out.println(i + "\t" + corp[i] + "\t" + price[i] + "\t" + stock[i] + "주");
}
System.out.println("--------------------------");
System.out.println("구매하고자 하는 종목의 번호를 입력하세요.[종료: 9]");
int num = Integer.parseInt(sc.nextLine());
if(num >= corp.length && num != 9) {
System.out.println("잘못입력하셨습니다.");
} else if(num != 9) {
if(money >= price[num] + price[num] * buyP) {
stock[num]++;
money -= price[num] + price[num] * buyP;
} else {
System.out.println("금액이 부족합니다.");
}
}
}
public void sellStock() {
System.out.println("---------------------------");
System.out.println(day + "일 시세. 보유금 :" + money + "원");
System.out.println("---------------------------");
System.out.println("번호\t종목명\t금액\t보유수량");
System.out.println("---------------------------");
for(int i = 0 ; i < corp.length ; i++) {
System.out.println(i + "\t" + corp[i] + "\t" + price[i] + "\t" + stock[i] + "주");
}
System.out.println("--------------------------");
System.out.println("판매하고자 하는 종목의 번호를 입력하세요.[종료: 9]");
int num = Integer.parseInt(sc.nextLine());
if(num >= corp.length && num != 9) {
System.out.println("잘못입력하셨습니다.");
} else if(num != 9) {
if(stock[num] == 0) {
System.out.println("해당주식을 보유하지 않았습니다.");
} else {
stock[num]--;
money += price[num] - price[num] * sellP;
}
}
}
}
((float) Math.floor(Math.random() * 101) -50) /10 을 하면 -5%~ 5% 사이가 됨
0.0 ~ 0.99 *101
00 ~ 100.99 -50
-50 ~ + 50 /10
-5.0 ~ + 5.0
오라클!!!!
DB할때 목표로 강사님이 생각하는거!!!
이 과정 수료할때까지 실습문제로 쿼리 100문제 풀기 (강사님이 내는건 3-40문제, 나머지는 우리가 낸다고)
자바랑 다른건, DB는 시간을 투자한만큼 실력이 늘어난데
회사 갈때마다 DB가 다르니까 많이 짜본 사람이 잘 짠다.
https://www.oracle.com/database/technologies/
c가 붙으면은 클라우드 기능도 같이
https://www.oracle.com/database/technologies/xe-prior-release-downloads.html
우리는 11g로 쓴데
위에 URL
Oracle SQL 설치
with JDK는 자바 포함되어있는거
우리는 Windows 32-bit/64-bit로 깔음
테이블들이 모인게, 스키마
스키마 모인게, 데이터베이스
RDBMS(Relation Database) 데이터들끼리 관계를 가지고 있다 이 관계로 데이터를 뽑을 수 있다, 중복된 데이터가 적음, 데이터 효과적으로 관리
nosql, 빅데이터...
빅데이터를 가장 잘 쓰는 CJ어떻게 잘 쓰는지 예시편의점에서 기저귀 - 맥주
DDL 데이터 정의 언어로 관계형 데이터베이스의 속성, 관계, 인덱스, 파일 위치 등 데이터베이스 고유의 특성을 포함한 구조를 정의DML 데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한 데이터베이스 언어DCL 권한 부여, 권한 삭제, 연결 등 데이터베이스에서 데이터에 대한 엑세스를 제어하기 위한 데이터베이스 언어(조작과 관련)
SQL Developer
보고서 필요없음 닫아버리기
테스트 누른 후 상태가 성공이라고 떠야한데 => 접속
접속되면 위의 아이콘 처럼 뜸
사용자 생성
SCOTT 데이터로 연습할거기 떄문에 이름 SCOTT
DDL - CREATE(생성), ALTER(수정), DROP(제거)
DCL - GRANT(할등), REVOKE(해제), COMMIT(적용), ROLLBACK(취소)
부여된 롤, 시스템 권한 => 모든 권한
=> 적용
HR 계정 비번 주기 1234 체크박스 해지
Local_SYS 접속해지
새로만들기
구글 드라이브 SCOTT 파일 다운받아서 넣기
왼쪽 드롭다운박스에서 SCOTT으로 연결
F5누르면 자동 실행
새로고침 하면 테이블이 생김
Local_SOCTT 로 가서
ctrl + 엔터로 실행
F5는 전체실행
Ansi-DB 이거를 바탕으로 만든게
Oracle 유료 --- Tibero(Oracle 따라서 만든거, 티맥스소프트에서 만듬, 티맥스는 톰캣가지고 따라만든 제우스도 있음)
MS-SQL 유료 --- Sybase(점점 공공기관에서 사라지는 추세)
MySQL 무료데이터베이스 서비스, 문제는 MySQL가 Oracle로 합병 -> 무료, 유료 버전이 생김, 구글, 트위터가 MySQL기반이였는데 Oracle에서 업데이트를 안 해줌 그래서 구글이 데이터베이스를 바꾸려고 하는데 그게 MariaDB
SQLite
PostgreSQL
------------------------Firebase------------------
NoSQL
MongoDB
Oracle NoSQL
SELECT문: 데이터를 조회한다.
SELECT 컬럼 : 보여질 데이터를 선택한다
FROM 데이터(테이블) : 데이터를 가져온다 (복사본 가져오는거임, 원본 영향 x)
WHERE 조건(선택사항) : 데이터를 걸려낸다
ORDER BY 값 정렬기준, ... (선택사항) : 데이터를 정렬한다
실행순서
FROM -> WHERE -> ORDER BY -> SELECT 단, SELECT에 순차함수가 존재할 경우 FROM -> WHERE -> SELECT -> ORDER BY
VIEW : 데이터를 조회한 결과. 원본 데이터의 복사본과 같음.데이터 취득 이후 원본데이터와는 관계 없음
WHERE
BETWEEN A AND B
IN
NOT IN
LIKE
https://www.w3schools.com/sql/sql_like.asp
-- emp 데이터 전체보여짐
SELECT * FROM EMP;
-- emp 데이터 중 EMPNO, ENAME, JOB 컬럼만 보여짐
SELECT EMPNO, ENAME, JOB FROM EMP;
-- AS 컬럼이름이 변경되어 보여짐
SELECT EMPNO AS AAAA, ENAME, JOB FROM EMP;
SELECT EMPNO AS 사번, ENAME, JOB FROM EMP;
-- AS 뒤 뛰어쓰기 할 경우 "" 쓰기
-- "" : 구문
-- '' : 문자열
SELECT EMPNO AS "사번 번호", ENAME, JOB FROM EMP;
-- 조건 WHERE = 같다, ! 다르다
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL = 1250;
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL != 1250;
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL >= 1000 AND SAL <=1500;
-- BETWEEN A AND B : 값이 A이상 B이하인 경우
SELECT EMPNO AS "사번 번호", ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 1500;
--사원 중 급여가 800이거나 3000이거나 5000인 사원의 사원명, 급여를 출력하시오
SELECT ENAME, SAL FROM EMP WHERE SAL = 800 OR SAL = 3000 OR SAL = 5000;
--값 IN (값1, 값2, ...) : 값이 값1이거나 값2이거나... 인것
SELECT ENAME, SAL FROM EMP WHERE SAL IN (800,3000,5000);
--값 NOT IN (값1, 값2, ...) : 값이 값1이거나 값2이거나... 이지 않은것
SELECT ENAME, SAL FROM EMP WHERE SAL NOT IN (800,3000,5000);
-- 문자열
SELECT ENAME FROM EMP WHERE ENAME = 'SMITH';
-- 이름에 S가 들어가는 사원을 구하시오
-- 값 LIKE 형식 : 값의 내용이 형식에 부합하면 가져옴
-- 형식에서의 % : 해당 위치에 내용이 있을수도 없을수도 있음
-- 형식에서의 _ : 해당 위치에 한글자가 뭐든 존재해야함
SELECT ENAME FROM EMP WHERE ENAME LIKE '%S%';
-- T앞에는 뭐든 있을 수 있으며, T 뒤에은 반드시 한글자( _ 언더바)
SELECT ENAME FROM EMP WHERE ENAME LIKE '%T_';
-- 사원 중 이름이 A로 시작하며, 중간에 A가 들어가는 사원을 구하시오
SELECT ENAME FROM EMP WHERE ENAME LIKE 'A%A%';
SELECT ENAME FROM EMP WHERE ENAME NOT LIKE 'A%A%';
-- ;를 해줘야 문장이 끝남
'TIL > academy' 카테고리의 다른 글
국비 TIL(Today I Learned) 20220705 오라클 집계함수, HAVING, 순차함수, 서브 쿼리 (0) | 2022.07.05 |
---|---|
국비 TIL(Today I Learned) 20220704 오라클 ORDER BY, DUAL, 사칙연산, CASE, DECODE (0) | 2022.07.04 |
국비 TIL(Today I Learned) 20220628 Bean, try ~ catch, Scanner (0) | 2022.06.29 |
국비 TIL(Today I Learned) 20220603 회원가입 폼 만들기 (0) | 2022.06.03 |
국비 TIL(Today I Learned) 20220602 게시판 만들기 (0) | 2022.06.02 |