본문 바로가기

   
Programming/Java

6일차!

반응형
관계형 데이타베이스란
관계형 데이터베이스 관리 시스템(RDBMS)은 IBM 산호세 연구소의 에드거 F. 커드가 도입한 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템이다. 현재 사용되는 대부분의 데이터베이스는 관계형 데이터베이스 모델을 기반으로 한다.

1980년대 이래로 RDBMS는 재무기록, 제조 및 물류 정보, 인사 데이터 등의 정보를 저장하는데 가장 많이 사용되는 스토리지다. 과거 계층형 데이터베이스나 네트워크 데이터베이스에 비해 사용 및 이해가 쉬워 관계형 데이터베이스가 이들을 많이 대체했다. 하지만 요즘은 XML 데이터베이스나 객체지향적 모델과 관계형 모델의 불일치 문제를 해결하기 위해 대두된 객체 지향 데이터베이스와 같은 새로운 경쟁자들이 대두되고 있다
 
테이블
데이터 처리에서, 테이블이란 흔히 배열이라고도 하며, 여러 필드들을 구성한다. 테이블은 비교적 영구적인 데이터와 자주 수정되는 데이터를 모두  저장할 수 있다. 예를 들면, 디스크 볼륨 상에 위치해 있는 테이블은 섹터가 기록될 때 갱신된다.
관계형 데이터베이스에서, 테이블이란 단일 주제에 관해 행과 열로 구성되는 정보 모음을 가리킨다. 예를 들면, 업무용 데이터베이스는 대개 고객 정보에 관한 테이블을 가지고 있는데, 고객의 계정 번호, 주소, 전화번호 등을 저장할 수 있는 여러 개의 행으로 구성된다. 테이블 내에서 계정 번호 등과 같은 낱낱의 데이터 각각을 필드라고 부른다. 하나의 행은 모든 고객들의 전화 번호 등과 같은 어떤 한 필드 내의 모든 데이터로 구성된다. 필드는 완전한 정보 셋인 레코드로 조직화되며, 각각은 하나의 열을 이룬다. 표준화 과정을 통해 데이터를 가장 효과적인 방법으로 테이블로 구성할 수 있는 방법을 결정한다.
컴퓨터로 만들어지거나 또는 종이 위에 손쉽게 그릴 수 있는 진리표에는 기반이 되는 결정이나 기준 목록을 포함한다. 진리표에는 가능한 모든 결정  상황이 목록화되며, 각 상황에서 취해져야 할 행위가 정의된다. 기본적인 예로는, 도로 교차점의 교통 상황에 대하여 "예" 또는 "아니오" 와 같은 결정들과 빨간색 신호나, 녹색 신호 등과 같이 기준들이 표현될 수 있다. 진리표는 여러 가지 상황에서 내려지는 결정에 따라 처리 기준을 지시하기  위한 컴퓨터 프로그램에도 삽입될 수 있다. 진리표가 변경되면 프로그램에도 반영된다.
HTML 테이블은 웹페이지 요소들을 공간적으로 구성하거나 목록이나 규격 등과 같은 표 형식의 데이터들이 화면에 보기 좋게 표시될 수 있는 구조를 만들기 위해 사용된다.
컬럼
컬럼(column)이란 관계형 데이터베이스 테이블에서 특정한 단순 자료형의 일련의 데이터값과 테이블에서의 각 열(row)을 말한다. 컬럼은 열이 어떻게 구성되어야 할 지에 대한 구조를 제공한다.

관계형 데이터베이스 용어에서 컬럼과 같은 의미로 사용되는 것은 속성(attribute)이다.

‘필드’(field)라는 용어가 종종 컬럼의 대용으로 동일한 의미로 사용되지만, 필드와 필드값은 한 열이나 한 컬럼 사이의 교차로 존재하는 단일 항목을 특정할 때 언급하는 것이다.

예제[편집]
예를 들어, 회사를 나타내는 테이블에는 다음과 같은 컬럼이 존재할 것이다.

ID (integer identifier, 각 열이 유니크하다, 즉 중복되는 항목이 없다)
Name (text)
Address line 1 (text)
Address line 2 (text)
City (integer identifier, 별개의 city 테이블에서 끌어온 것)
Postal code (text)
Industry (integer identifier, 별개의 industries 테이블에서 끌어온 것)
etc.
각 열은 각 컬럼에 대한 데이터 값을 제공할 것이며, 단일 구조 데이터 값으로 이해될 것이다. 이 경우에는 company를 나타낸다. 보다 공식적으로 각 열은 튜플의 세트로 구성된 관계변수로서 해석될 수 있다. 적절한 컬럼명과 이 열이 그 컬럼을 위해 제공하는 값, 2개의 항목으로 각 튜플이 구성된다.

Column 1    Column 2
Row 1 Row 1, Column 1   Row 1, Column 2
Row 2 Row 2, Column 1   Row 2, Column 2
Row 3 Row 3, Column 1   Row 3, Column 2
데이터베이스 예제들: MySQL, SQL Server, Access, Oracle, Sybase, DB2.

코딩은 SQL 질의어와 관련이 있다.



SQL
SQL이란 Structured Query Language의 약자로 말 그대로 이미 정해진(구조화된) 쿼리 언어라는 말 입니다. 일정한 쿼리 언어로 DB를 제어 할 수 있으니 데이타를 매우 쉽게 관리 할 수 있겠지요..

 여기서는 SQL에 대한 기초적인 내용을 소개합니다. 우선 SQL의 특성에 대해서 간단히 알아보죠.
  SQL문은 다음 세 가지 영역으로 크게 분류할 수 있습니다.

  DML(Data Manipulation Language) : 데이터를 검색하거나 변경하는 데이터 조작 언어
  DDL(Data Definition Language) : 데이터의 구조를 정의하는 데이터 정의 언어
  DCL(Data Control Language) : 데이터베이스 사용자에게 부여한 특권을 정의하는 데이터 제어 언어
  DML에는 다음 네 가지 기본 문장이 있습니다.
     SELECT 문 : 테이블로부터 행 검색
     INSERT 문 : 테이블에 행 추가
     UPDATE 문 : 테이블 내의 기존 행 변경
     DELETE 문 : 테이블에서 행 제거
  다음은 SQL의 특성이라고 할 수 있습니다.
   1. 모든 SQL 문은 세미콜론(;)에 의해 종료된다.
   2. SQL 문은 명료성을 위해 한 개 라인의 중앙에 위치시키거나 여러 라인으로 분할할 수 있다.
   3. SQL은 대소문자를 구별하지 않는다.

1. Account 클래스
 - 출금기능 : 출금할 금액과 비밀번호를 전달받아서 빌밀번호가 일치하는경우, 잔액에서 금액을 차감한다.
      잔액을 화면에 표시한다.
 - 비밀번호 변경기능 : 비밀번호와 새 비밀번호를 전달받아서 비밀번호가 일치하면 새 비밀번호로 교체한다.
                      화면에 교체되었다는 메세지를 표시한다.
 - 잔액조회 기능 : 실행하면 화면에 잔액을 표시합니다.
package bank;

public class Account {
/**
 * 1. Account 클래스
  - 출금기능 : 출금할 금액과 비밀번호를 전달받아서 빌밀번호가 일치하는경우, 잔액에서 금액을 차감한다.
      잔액을 화면에 표시한다.
  - 비밀번호 변경기능 : 비밀번호와 새 비밀번호를 전달받아서 비밀번호가 일치하면 새 비밀번호로 교체한다.
                      화면에 교체되었다는 메세지를 표시한다.
  - 잔액조회 기능 : 실행하면 화면에 잔액을 표시합니다.
 */
      
       int balances;
       int password;
      
       public Account( int balances, int password){
             this.balances = balances;
             this.password = password;
      }
      
       public void Withdrawal( int pwd, int money){
             if(password == pwd){
                  balances -= money;
                  System.out.println( "남은 잔액은 : " + balances + "입니다." );
            } else{
                  System.err.println( "비밀번호가 틀렸습니다." );
                  System.out.println( "비밀번호를 확인해 주시기 바랍니다."); 
            }
            
      }
      
       public void ChangePassword( int pwd, int newpwd){
             if(password == pwd){
                  pwd = newpwd;
                  System.out.println( "정상적으로 비밀번호 변경 되었습니다." + pwd);
            } else{
                  System.err.println( "비밀번호가 틀렸습니다." );
                  System.out.println( "비밀번호를 확인해 주시기 바랍니다.");
            }
      }
      
      
       public void Balanceinquiry(){
            System.out.println( "남은 잔액은" + balances + "입니다." );
      }
      
}


package bank;

public class AccountMain {

       public static void main(String[] args){
            Account a = new Account(57_000_000, 797912);
            a.Withdrawal(797912, 1);
            a.ChangePassword(797912, 1111);
            a.Balanceinquiry();
      }
      
}



2. Student 클래스
3명의 객체를 만들어서 처리
 - 속성 : 이름, 국어, 영어, 수학, 총점, 평균
 - 생성자 : 이름, 국어, 영어, 수학 점수를 전달받아서  변수에 저장하고, 생성자안에서 총점과 평균도 계산해서 변수에 저장하기
 StudentDemo 클래스
 - Student 객체 5개 저장할 수 있는 배열을 생성
 - 학생의 이름, 국어, 영어, 수학점수를 scanner를 사용해서 읽어오기
 - 읽어온 정보는 Student 객체에 담고, 다시 배열에 순서대로 하나씩 저장
 - 화면에 배열에 저장된 학생정보 출력
 - 화면에 총점이 가장 높은 학생부터 출력

 예제) 3사람의 정보를 입력받는다.
이름, 나이, 연락처

package work;

public class HomeMain {

      String name;
       int language;
       int english;
       int meth;
       int total;
       int avg;
      
       public HomeMain(){}
       public HomeMain(String name, int language, int english, int meth){
             this.name = name;
             this.language = language;
             this.english = english;
             this.meth = meth;
             this.total = language + english + meth;
             this.avg = total / 3;
      }
      
       public void StudentView(){
            System.out.print( "이름 " + name);
            System.out.print( "\t국어 " + language);
            System.out.print( "\t영어 " + english);
            System.out.print( "\t수학 " + meth);
            System.out.print( "\t총점 " + total);
            System.out.println();
      }     
}




package work;
import java.util.Scanner;

public class Home {
      
       public static void main(String[] args){
            Scanner s = new Scanner(System.in);
            HomeMain[] hm = new HomeMain[3];
            HomeMain htemp = new HomeMain();
            
            String name;
             int language;
             int english;
             int meth;
            
            
             for( int i=0; i<hm.length; i++){
                  System.out.print( "이름 : " );
                  name = s.next();
                  
                  System.out.print( "국어 : " );
                  language = s.nextInt();
                  
                  System.out.print( "영어 : " );
                  english = s.nextInt();
                  
                  System.out.print( "수학 : " );
                  meth = s.nextInt();
                  System.out.println();
                  hm[i] = new HomeMain(name, language, english, meth);
            }                       
                  
             for( int i=0; i<3; i++){
                   for( int j=0; j<2; j++){
                         if(hm[j].total < hm[j+1].total){
                              htemp = hm[j];
                              hm[j] = hm[j+1];
                              hm[j+1] = htemp;
                        }
                  }
            }
            
             for(HomeMain h : hm){
                  h.StudentView();
            }
            
                        
            s.close();
            
      }
      
}


package work;
import java.util.Scanner;
public class Number {
      
       public static void main(String[] args){
             //임의의 숫자 10개를 담아서, 숫자중에 짝수의 개수와 홀수의 갯수가 몇개인지 출력
             //임의의 두자리 두자리 숫자를 입력받아서 10의 자리의 수 1의 자리의 수가 무엇인지 출력           
            
             int[] numarr = {1,1,1,1,2,1,1,1,1,1};
             int even = 0;
             int evv = 0;
            
             for( int i=0; i<numarr.length; i++){
                   //짝수 갯수
                   if(numarr[i]%2==0){
                        even++;
                        
                  } else{                   //홀수 갯수
                        evv++;
                  }
            }
            System.out.println( "짝수 : " + even);
            System.out.println( "홀수 : " + evv);
            
             //임의의 두자리 두자리 숫자를 입력받아서 10의 자리의 수 1의 자리의 수가 무엇인지 출력
             //char 문자 = str.charAt()
            Scanner s = new Scanner(System.in);
            String num;
            System.out.print( "두자리 숫자 입력 : " );        
            num = s.next();
            
            System.out.println( "첫째자리 : " + num.charAt(0));
            System.out.println( "10번째자리 : " + num.charAt(1));
            s.close();
      }
}


package exam2;

public class Contact {
      String name;
       int age;
      String tel;
      
       public Contact(){ }
      
       public Contact(String a_name, int a_age, String a_tel){
             name = a_name;
             age = a_age;
             tel = a_tel;
      }
      
       public void DisplayInfo(){
            System.out.println( "이름 : " + name + "\t나이 : " + age + "\t연락처 : " + tel);
      }
      
}




package exam2;
import java.util.Scanner;
public class ContactDemo {

       public static void main(String[] args){
            Contact[] c = new Contact[3];
            Contact w = new Contact();
            
            c[0] = new Contact( "아이유" ,23 ,"010-2110-8344" );
            c[1] = new Contact( "씨스타" ,25 ,"010-1212-1544" );
            c[2] = new Contact( "AOA",28 , "010-3453-2344");  
            
             for(Contact i : c){
                  i.DisplayInfo();
            }
 
      }     
}



package oop5;

public class Employee {
      
      String empNo;
      String name;
       int salary;
      
       public Employee(){}
      
       public Employee(String empNo, String name){
             //객체를 생성하게되면 내부적으로는 this와 super라는 키워드가

자동으로 생성된다. 그리고 this와 super는 값을 저장할수 있다.
             //this = 자기자신을 찾아가기 위한 주소값이 들어있다. 객체 참

조에 대한 주소값 객체 자신을 가르킴 용도는 생성된 객체(자기안에 있는)의 변수

, 기능에 접근하려고
             //프로그램은 항상 이름을 찾을때 항상 가까운곳에서 찾는다.
             //this를 붙이게 되면 생성된 객체에 변수를 접근한다
             //this()
             //this(String, String)
             //this(String, String, int)
             //생성자끼리만 사용할수 있다.
      //this(empno , name, 0); 3개의 매개변수인 생성자를 호출 코딩라인수를 줄일수 있기 때문에 쓰는데 거의 사용하지 않는다. 코딩을  일일히 해야 됐었기 때문에 만들어 놨던것
     //이클립스 alt shift s 키를 누른뒤 usingfield 누르면 자동으로 생성자를 만들수 있다.            
             this.empNo = empNo; //이제 변수 이름을 고민하지 않아도 된다.
             this.name = name;
      }
      
      
       public Employee(String empNo, String name, int salary) {
             super();
             this.empNo = empNo;
             this.name = name;
             this.salary = salary;
      }

       public void display(){
             //String empNo = "mgr_001_001";
             //System.out.println("사번 : " + empNo);//바로위에 변수를 참

            
             //int x = 10;
             //int y = 20;
             //int total = x+y;
             //System.out.println(x);
             //System.out.println(this.salary);//메소드안에 만들어진 변수

인지 최초 객체에서 선언한 변수인지 this로 판별 가능
             //System.out.println(total);
            
            System.out.println( "사번 : " + this .empNo);//이변수는 최초

선언한 변수를 바라봄
            System.out.println( "이름 : " + this .name);
            System.out.println( "월급 : " + this .salary);          
      }
}




package oop5;

public class EmployeeDemo {
      
       public static void main(String[] args){
            Employee e = new Employee( "00000001", "길동" ,200);
      }
      
}




package oop5;

public class CircleDemo {
       public static void main(String[] args){
//jvm 메모리3기가 할당 클래스 영역, 메소드 영역, 객체 영역으로 나누어서 관리함
//클래스영역 : 설계도를 읽어서 보관하는 곳
//메소드영역 : 메소드안에서 정의한 변수가 만들어지는 곳
//객체영역 : 생성된 객체가 보관되는 곳
//Circle c1 = new Circle();
//1. Circle.class를 읽어와서 클래스 영역에 보관한다.\
//2. 설계도를 사용해서 객체영역에 Circle객체를 생성한다.
//3. 객체가 생성되면 고유한 주소가 생성됨
//4. 객체가 만들어진 영역과 일반적인 변수가 만들어지는 영역이 다르다.
//5. 메소드 영역에 객체에 대한 주소값 즉 c1에는 객체를 참조 하는 주소가 생성.
//Circle c2 = new Circle(); 이미 c1설계도가 만들어져 있기때문에 Circle.class설계도를 또새로 만들지 않는다.
//static 이 되있는것들은 따로 뽑아낸다 static이 붙은것은 클래스 영역에 바로 생성됨
//기본적으로는 클래스영역에 설계도가 만들어지고 실제 사용은 객체 영역에 생성되야 사용이 가능
//위에 기술되었던것은 모두 jvm내부 프로세스이다.
//클래스 이름만 있어도 로딩된다. Circle.class -> jvm이 인식 + 읽어들임
//static 객체는 여러개 만들어지지 않음 클래스 이름이 등장하는 순간 그설계도가 메모리에 읽혀진다.
//해당 객체들이 다공유하는 값이 필요할때 static을 사용 = 상수(변하지 않는 값)

            Circle c1 = new Circle();
            c1.r = 4;         
            c1.area();
            c1.round();
            
             //아래에보면 static으로 선언한 값만 늘어나는것을 확인할수 있

다.
             //x는 계속 새로 생겨나는 객체이기때문에 0에서 1
             //y는 아까처음 만들어진값이 계속 누적되서 3에 결과가 나온다.
            Circle c2 = new Circle();
            Circle c3 = new Circle();           
            c1.increase();
            System.out.println(c1.x);
            System.out.println(c1.y);           
            c2.increase();
            System.out.println(c2.x);
            System.out.println(c2.y);
            c3.increase();
            System.out.println(c3.x);
            System.out.println(c3.y);
      }
}





package oop5;

public class Circle {
       int x = 0;
       static int y = 0;
      
       public void increase(){
            x++;
            y++;
      }
      
       static double pi; //static이 붙으면 객체 생성에 참여하지 않는다.
       //설계도에는 들어있지만 객체생성에 참여하지 않음
       int r;
       //변수의 이름을 다대문자로 적는다. 상수 fianl= 값 자체를 바꿀수 없게

해주는 키워드
       static final double PI = 3.14;
       static final double DEPOSIT_RATE = 0.01;
       static final int MAX_UPLOAD_SIZE = 1000;
      
       public Circle(){}
            
       public void area(){
             //관례적으로 스택틱으로 선언된것은 클래스.변수명으로 쓴다.
             //static 사용이유 1. 하나만 만들어서 공유할라고.
             //2. 변하지 않는값을 담을려고
             double result = Circle.PI * r * r;
            System.out.println( "면적: " + result);
      }
      
       public void round(){
             double result = 2 * Circle.PI * r;
            System.out.println( "둘레: " + result);
      }
}




package oop6;

public class Account {
      
       private String name;
       private int balance;
       private int password;
      
       public Account(String name, int balance, int password){
             this.name = name;
             this.balance = balance;
             this.password = password;
      }

       public void deposit( int money, int pwd){
             if(pwd == password){
                  balance += money;
                  System.out.println(name + "고객님" + money +"원이 적

립되었습니다. ");
                  System.out.println( "현재 잔액은 : " + balance + "원

입니다. ");
            } else{
                  System.err.println( "비밀번호가 일치하지 않습니다." );
                  System.out.println( "다시 입력해 주시기 바랍니다." );   

            
            }
      }
      
}




package oop6;

public class AccountDemo {
      
       public static void main(String[] args){
            Account a = new Account( "김종현" , 170000, 1234445);
            a.deposit(30000, 123442345);
      }
      
}





package lang;

public class StringDemo {

       public static void main(String[] args){
             //String src = new String("hello, world");
            String str = "hello, world";
             //length -> 문자열 길이
            System.out.println(str.length());
             //str.length():int- String  ->  length() 메소드 -> int 반환

타입 -> String -> 클래스
            
             //예상되는 타입을 부여하면 예상되는 자료형타입의 검색이 된다

.
             //지정된 문자열의 포함여부를 조회
             boolean 포함여부 = str.contains( "healo");
            System.out.println(포함여부);
            
             //지정된 위치의 문자조회는
             char 문자 = str.charAt(1);
            System.out.println( "1번째 문자는" + 문자);
            
            String jumin = "811121-1234567";
             if(jumin.charAt(7) == 0){
                  System.out.println( "여자" );
            } else {
                  System.out.println( "남자" );
            }

             //지정된 글자가 있는 위치 조회 -> int indexOf(글자)
             int 위치 = str.indexOf( "llo");
            System.out.println(위치);
            
             //대문자로 변환하기, 소문자로 변환하기
            String 대문자문자열 = str.toUpperCase();
            System.out.println(대문자문자열);
            
            String 소문자문자열 = str.toLowerCase();
            System.out.println(소문자문자열);
      }
      
}

  


반응형