TIL/academy

국비 TIL(Today I Learned) 20220701 모의주식, 오라클

토희 2022. 7. 1. 15:36
728x90

우리가 하는 프로젝트에서는 굳이 싱글턴으로 할필요 없음

사용양이 많을수록 싱글턴이 유리

 

싱글턴은 나 자체를 변수로 가지고 있음 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

 

SQL LIKE Operator

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

-- 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%';

-- ;를 해줘야 문장이 끝남
728x90