CREATE DATABASE `university`;

SHOW databases;

USE `university`;

#DROP TABLE `university`.`student`;
CREATE TABLE `university`.`student`(           # ` ` 은 해도 되고 안해도 되는 것 같다. 속성도.
  `student_id` int unsigned NOT NULL ,
  `name` varchar(20) NOT NULL ,
  `address` varchar(100) NULL ,
  `birth_date` char(8) NULL ,
  `major_id` smallint NULL ,
  `enterance_year` smallint NULL ,
  `leave_yn` bit NULL default 0;
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`student_id`)
) ENGINE=InnoDB;

INSERT INTO `university`.`student`
(student_id, name, address, birth_date, major_id, enterance_year, leave_yn)
VALUES
(2016001, '정소정', '서울시 서초구 방배동 911-1', '19971101', 111, 2016, 0),
(2017053,'성민경','경상북도 대구 수성구 삼익 1-1','19980412',111,2017,1),
(2018111,'노규희','충청남도','19991204',130,2018,1),
(2017105,'박성희','강원도','19980908',130,2017,0);

select * from `university`.`student`;

select * from `university`.`student`
where student_id = 2016001;

select student_id, name from `university`.`student`
where major_id = 111;

UPDATE `university`.`student`
SET
address = '부산특별시 해운대 비치333-3',
leave_yn = 1
WHERE student_id = 2016001;

select * from university.student
where student_id = 2016001;

DELETE FROM university.student
WHERE student_id = 2016001;

select * from university.student 
where student_id = 2016001;

select * from university.student;

CREATE TABLE `university`.`class` (
  `class_id` int unsigned NOT NULL ,
  `name` varchar(20) NOT NULL , 
  `professor_id` int NOT NULL , 
  `major_id` smallint NULL ,
  `duration` smallint NULL ,
  `type` tinyint NULL ,
  `start_time` char(2) NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (class_id)
  ) ENGINE = InnoDB;
  
SHOW TABLES;

SHOW CREATE TABLE `university`.`class`;

select * from `university`.`class`;

DESC `university`.`class`;

INSERT INTO `university`.`class`
(class_id, name, professor_id, major_id, duration, type, start_time)
VALUES
(10000, '데이터베이스', 10001, 111, 3, 1, '13'),
(20001, '물리기초1', 20011, 111, 1, 2, '09'),
(30002, '사회학개요', 30001, 120, 2, 3, '15'),
(50003, '통계학1', 50001, 130, 3, 4, '10');

CREATE TABLE `university`.`registerClass` (
  student_id int unsigned NOT NULL ,
  class_id int unsigned NOT NULL ,
  last_update timestamp NOT NULL DEFAULT CURRNET_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (student_id, class_id) ,
  FOREIGN KEY (student_id) REFERENCES `university`.`student` (student_id) ,
  FOREIGN KEY (class_id) REFERENCES `university`.`class` (class_id)
  ) ENGINE=InnoDB;
  
INSERT INTO `university`.`registerClass`
(student_id, class_id)
VALUES
(2018111, 10000), (2018111, 5003), (2018111, 30002);

INSERT INTO `university`.`registerClass`
(student_id, class_id)
VALUES
(2017105, 20001), (2017105, 30002), (2017105, 50003);

SELECT * FROM `university`.`registerClass`;

INSERT INTO `university`.`registerClass`
(student_id, class_id)
VALUES
(2017053, 10000), (2017053, 50003);

  #INSERT INTO `university`.`registerClass`
  #(student_id, class_id)
  #VALUES
  #(2017053, 45003);

SELECT S.NAME, C.NAME, R.last_update
FROM student S join registerClass R on S.student_id = R.student_id
join class C on R.class_id = C.class_id
where S.student_id = 2017053;

SELECT S.NAME, C.NAME, R.last_update
FROM student S join registerClass R on S.student_id = R.student_id
join class C on R.class_id = C.class_id
where S.student_id = 2018111;

SELECT S.NAME, C.NAME, R.last_update
FROM student S join registerClass R on S.student_id = R.student_id
join class C on R.class_id = C.class_id
where S.student_id = 2017105;

 

 

CREATE DATABASE `university`;

`university`라는 데이터베이스를 생성한다.

 

SHOW databases;

현재 생성되어있는 데이터베이스들을 보여준다.

 

 

USE `university`;

`university` 데이터베이스를 이용할 것임을 선언한다.

 

#DROP TABLE `university`.`student`;

DROP TABLE은 이미 존재하는 이 테이블을 삭제하겠다는 의미이다.

 

CREATE TABLE `university`.`student`(          
  `student_id` int unsigned NOT NULL ,
  `name` varchar(20) NOT NULL ,
  `address` varchar(100) NULL ,
  `birth_date` char(8) NULL ,
  `major_id` smallint NULL ,
  `enterance_year` smallint NULL ,
  `leave_yn` bit NULL default 0;
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`student_id`)
ENGINE=InnoDB;

 

university DB 안에 'student'라는 테이블을 생성한 것이다.

 

student_id, name, address, birth_date, major_id, enterance_year, leave_yn, last_update가 속성이다.

속성 이름 뒤에 도메인을 적어준다. 도메인은 속성의 특성에 맞는 자료형이다.

 

unsigned는 부호가 없다는 뜻이다. 예를 들어 tinyint의 경우, (signed) tinyint의 범위는 -128~127이며, 

unsigned tinyint의 범위는 0~255이다.

 

NULL, NOT NULL은 NULL값이 될 수 있냐 없냐를 정해주는 것이다. 예제의 경우 학번과 이름은 NULL값이 될 수 없도록 했다.

 

varchar( )의 괄호 속 숫자는 최대로 들어갈 수 있는 byte 값이다.

 

`leave_yn`는 휴학여부 속성으로 0과 1로 구분되고, 투플값이 없을 경우 default 값은 0이 들어가도록 했다.

 

`last_update`는 업데이트 시각으로, 직접 적는 것이 아니라 CURRNET_TIMESTAMP를 이용하여 자동으로 저장된다.

이 테이블의 기본키는 `student_id`로, 학번만 가지고도 투플들을 구분할 수 있다는 뜻이다.

 

MySQL의 스토리지 엔진으로 주로 MyISAM과 InnoDB가 사용된다.

스토리지 엔진은 데이터베이스 엔진이라고도 불리며, RDBMS가 데이터베이스에 대해 데이터를 삽입, 추출, 업데이트, 삭제하는 데 사용하는 기본 소프트웨어 컴포넌트이다. 

MyISAM은 항상 테이블에 ROW COUNT를 가지고 있기 때문에 SELECT 명령 시 속도가 빠르고, '풀텍스트 인덱스'를 지원하는데, 이는 자연 언어를 이용해 검색할 수 있는 특별한 인덱스로 모든 데이터 문자열의 단어를 저장한다는 것이다. 이때문에 Read only 기능이 많은 서비스일수록 효율적으로 사용할 수 있는 엔진이다. 단점으로는, row level locking을 지원하지 못해서 select, insert, update, delete 명령 시 해당 테이블 전체에 locking이 걸린다는 것이다. 그래서 갱신이 많이 필요한 경우에는 유용하지 못하다.

InnoDB는 MyISAM과 대조적인 엔진으로, 우선 row level locking이 지원된다는 장점이 있고, 트랜잭션 처리가 필요한 대용량 데이터를 다룰 때 효율적이다. 데이터의 변화가 많은 서비스에 적합하다. 또한, 유일하게 외래키를 지원하는 표준적인 스토리지 엔진이다.단점으로는, 풀텍스트 인덱스를 지원하지 않는다는 것이 있다.

 

주로 InnoDB를 많이 사용한다고 하고, 이번 예제에서도 InnoDB를 사용하였다. 

 

INSERT INTO `university`.`student`
(student_id, name, address, birth_date, major_id, enterance_year, leave_yn)
VALUES
(2016001, '정소정', '서울시 서초구 방배동 911-1', '19971101', 111, 2016, 0),
(2017053,'성민경','경상북도 대구 수성구 삼익 1-1','19980412',111,2017,1),
(2018111,'노규희','충청남도','19991204',130,2018,1),
(2017105,'박성희','강원도','19980908',130,2017,0);

 

student 테이블에 투플들을 삽입하는 코드이다. 

INSERT INTO로 속성을 한 번 나열하고, VALUES를 통해 각각의 개체들을 추가한다.

 

select * from `university`.`student`;

select from은 테이블에서 정보를 가져온다는 뜻이고, *은 테이블에 있는 모든 데이터를 가져온다는 뜻이다.

따라서 이 코드를 실행하면 university.student에 있는 4개의 투플들을 보여준다.

 

select * from `university`.`student`
where student_id = 2016001;

where은 조건의 개념으로, 이 경우에는 학번이 2016001인 투플의 모든 데이터를 가져온다는 뜻이 된다.

 

select student_id, name from `university`.`student`
where major_id = 111;

이 경우에는 selcet student_id, name 이므로, 전공번호가 111인 투플의 학번과 이름을 가져온다.

 

UPDATE `university`.`student`
SET
address = '부산특별시 해운대 비치333-3',
leave_yn = 1
WHERE student_id = 2016001;

 

update는 말 그대로 테이블을 새로운 정보로 업데이트한다는 뜻이다.

이 경우, 학번이 2016001인 투플의 주소와 휴학여부 정보를 변경하게 된다.

 

select * from university.student
where student_id = 2016001;

DELETE FROM university.student
WHERE student_id = 2016001;

select * from university.student 
where student_id = 2016001;


select from university.student;

 

select문은 마찬가지로 정보를 가져오는 코드이고,

DELETE문은 university DB의 student 테이블에서 student_id가 2016001인 투플을 삭제하는 코드이다.


CREATE TABLE `university`.`class` (
  `class_id` int unsigned NOT NULL ,
  `name` varchar(20) NOT NULL , 
  `professor_id` int NOT NULL , 
  `major_id` smallint NULL ,
  `duration` smallint NULL ,
  `type` tinyint NULL ,
  `start_time` char(2) NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (class_id)
  ) ENGINE = InnoDB;

 

두번째로 universityDB 안에 'class'라는 테이블을 생성한 것이다.

속성으로는 class_id, name, professor_id, major_id, duratin, type, start_time, last_update가 있고 각각의 도메인이 달려있다.

투플을 구분할 수 있는 기본키는 class_id이다.

 

SHOW CREATE TABLE `university`.`class`;

class 테이블에 대한 정보를 알려준다.

 

select * from `university`.`class`;

DESC `university`.`class`;

테이블의 속성과 도메인, NULL 여부 등의 모든 정보를 알려주는 DESC문이다.

 

INSERT INTO `university`.`class`
(class_id, name, professor_id, major_id, duration, type, start_time)
VALUES
(10000, '데이터베이스', 10001, 111, 3, 1, '13'),
(20001, '물리기초1', 20011, 111, 1, 2, '09'),
(30002, '사회학개요', 30001, 120, 2, 3, '15'),
(50003, '통계학1', 50001, 130, 3, 4, '10');

 

class테이블에 4개의 투플을 생성하는 코드이다. 위의 INSERT구문과 같다.

 

CREATE TABLE `university`.`registerClass` (
  `student_id` int unsigned NOT NULL ,
  `class_id` int unsigned NOT NULL ,
  `last_update` timestamp NOT NULL DEFAULT CURRNET_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (student_id, class_id) ,
  FOREIGN KEY (student_id) REFERENCES `university`.`student` (student_id) ,
  FOREIGN KEY (class_id) REFERENCES `university`.`class` (class_id)
  ) ENGINE=InnoDB;

 

세번째로 registerClass 테이블을 생성하는 코드이다. 

속성으로는 student_id, class_id, last_update가 있고, 기본키는 student_id와 class_id이다.

이 테이블에서는 외래키를 사용하였는데, 외래키는 다른 테이블의 속성을 참조하는 속성이다.

student_id는 student 테이블의 student_id를 참조하였고,

class_id는 class 테이블의 class_id를 참조하였다. 그곳에서 값을 가져올 수 있다고 생각하면 될 것 같다.

 

INSERT INTO `university`.`registerClass`
(student_id, class_id)
VALUES
(2018111, 10000), (2018111, 5003), (2018111, 30002);

INSERT INTO `university`.`registerClass`
(student_id, class_id)
VALUES
(2017105, 20001), (2017105, 30002), (2017105, 50003);

SELECT * FROM `university`.`registerClass`;

INSERT INTO `university`.`registerClass`
(student_id, class_id)
VALUES
(2017053, 10000), (2017053, 50003);

 

resigterClass 테이블에 투플들을 생성하는 코드들이다.

코드를 보면 student_id와 class_id 투플값이 모두 student테이블의 student_id와 class테이블의 class_id에 있는 값들인 것을 확인할 수 있다. 외래키를 사용했기 때문이다.

 

  #INSERT INTO `university`.`registerClass`
  #(student_id, class_id)
  #VALUES
  #(2017053, 45003);

이처럼 만약 참조되는 테이블에 없는 값을 value로 입력하면 오류가 뜬다.

 

SELECT S.NAME, C.NAME, R.last_update                        #조회할 것 -> 결합할 것
FROM student S join registerClass R on S.student_id = R.student_id         #조건
join class C on R.class_id = C.class_id
where S.student_id = 2017053;

SELECT S.NAME, C.NAME, R.last_update
FROM student S join registerClass R on S.student_id = R.student_id
join class C on R.class_id = C.class_id
where S.student_id = 2018111;

SELECT S.NAME, C.NAME, R.last_update
FROM student S join registerClass R on S.student_id = R.student_id
join class C on R.class_id = C.class_id
where S.student_id = 2017105;

 

join은 릴레이션 간의 조합을 검색하는 키워드이다.

 

예를 들어, 첫번째 예시는 학번이 2017053인 학생의 이름(from S)과 수강한 과목(C), 수강신청시간(R)을 조회하는 코드이다.

우선 join 다음에 나오는 on은 두 테이블이 결합할 조건을 의미한다.

이 예제에서는 student테이블의 student_id와 registerClass테이블의 student_id가 같을 경우, 

student테이블의 name과 class테이블의 name과 registerClass테이블의 last_update를 결합한다는 의미이다.

결과는 다음과 같이 나온다.

 

 

두번째, 세번째 예제도 같은 코드이고 학번만 바꾼 예제이다.

'Database > SQL' 카테고리의 다른 글

[MySQL] SQL 옵티마이저  (0) 2021.01.18
[MySQL] 데이터 제어어 : DCL  (0) 2021.01.18
[MySQL] Titanic 예제  (0) 2021.01.11
[MySQL] MySQL 설치하기  (0) 2021.01.10
[MySQL] 데이터베이스 개념  (0) 2021.01.10

1. 객체 지향 프로그래밍

객체 지향 프로그래밍이란 객체를 기반으로 하는 프로그래밍이다. 

객체는 사람, 자동차, 건물, 주문, 생산, 관리 등 눈에 보이거나 어떠한 행동을 나타내는 단어를 예로 들 수 있다.

 

반대의 개념은 절차 프로그래밍이 있는데,

이것은 순서대로 일어나는 일을 시간 순으로 프로그래밍하는 것으로, C언어가 대표적이다.

 

2. 클래스

클래스객체에 대한 속성과 기능을 코드로 구현한 것으로, 사용자 정의 자료형이라고 말할 수 있다.

클래스는 데이터와 함수로 정의된다.

 

예를 들어 "학생"이라는 클래스가 있다면,

데이터학번, 이름, 학년, 주소 등이 있고,

함수로는 수강신청, 수업 듣기, 시험 보기 등이 있을 것이다.

 

속성객체의 특성을 정의하는 것으로, 변수 또는 데이터, 멤버 변수라고도 부른다.    (명사)

위의 예에서 학번, 이름, 학년, 주소 등이 해당된다.

 

함수메서드라고도 불리며, 객체가 하는 기능들을 구현하는 것이다.  (동사)

 

3. 클래스 정의하기

(접근 제어자) class 클래스이름 {

    멤버 변수;

    메서드;

}

 

/* 클래스 이름은 대문자로 시작하며, 하나의 자바 파일에 하나의 클래스를 두는 것이 기본이다.

여러 개의 클래스가 같이 있는 경우, public 클래스는 단 하나이며, public 클래스와 자바 파일의 이름은 동일해야 한다.

자바의 모든 코드는 class 내부에 위치한다. */

 

<학생 클래스 만들기>

package classpart;

public class Student {
    int studentId;
    String studentName;
    int grade;
    String address;
    
    public void showStudentInfo() {
        Sysstem.out.println(studentName + ", " + address);
    }
}

studentId부터 address까지가 멤버 변수이고, 

public void showStudentInfo()가 학생 정보를 보여주는 기능을 하는 메서드(함수)이다.

 

4. 패키지

패키지란 클래스 파일의 묶음이다. 패키지를 만들면 프로젝트 하위에 물리적으로 디렉토리가 생성된다.

패키지는 계층 구조로 구성되며, ( . ) 온점으로 계층을 구분한다.

패키지명은 소문자로 적는다.

 

package 패키지명;

 

5. 메서드

메서드는 함수의 일종으로, 객체의 기능을 제공하기 위해 클래스 내부에 구현되는 함수이다.

함수란 하나의 기능을 수행하는 일련의 코드로, 중복되는 기능은 함수로 구현하여 함수를 호출하여 사용한다.

 

//함수 선언
int add (int num1, int num2) {
    return num1 + num2;
}

//함수 사용
public void static main(String[] args) {
    int sum = add(10, 20);
    System.out.println("10 + 20 = " + sum);
}

 

 

<함수의 장점>

1) 기능을 나누어 코드를 효율적으로 구현할 수 있다.

2) 기능별로 함수를 구현해 놓으면 같은 기능을 매번 코드로 만들 필요가 없다.

3) 프로그램을 실행할 때 생긴 오류를 수정하는 디버깅 작업을 할 때도 편리하다.

 

**가능하면 하나의 함수에 하나의 기능만 구현하는 것이 좋다.

 

6. 객체 생성하기

클래스를 사용하기 위해서는 "객체"를 생성해야 한다.

new 예약어를 이용해 객체를 생성한다.

 

    클래스명 변수이름 = new 생성자();

 

ex) Student studentA = new Student();

 

7. 생성자

생성자란 객체가 생성될 때 멤버 변수의 값을 초기화하기 위해 사용되는 특별한 함수를 말한다.

생성자 이름은 클래스명과 같다.

생성자는 메서드가 아니고, 상속되지 않으며, 리턴 값이 없지만 앞에 void를 적지 않는다.

 

디폴트 생성자는 객체가 생성될 때 컴파일러가 자동으로 생성하는 코드이다.

클래스에 생성자를 추가하면 디폴트 생성자는 제공되지 않는다.

 

8. 생성자 재정의 (오버로드)

함수명은 같고 전달되는 인자의 자료형이 다른 함수를 정의하면 이를 메서드 오버로드라고 부른다. 즉, 다른 함수로 취급된다.

이를 이용해 생성자의 초기화 함수를 여러 개 정의할 수 있다. 이때, 전달되는 인자의 자료형과 개수를 달리 해야한다.

 

public class Person {
    String name;
    float height;
    float weight;
    
    public Person() {}    //디폴트 생성자
    
    public Person(String pName) {    //이름이 인자로 전달되는 생성자, 
        name = pName;                //pName을 전달하여 멤버변수 name을 초기화할 수 있다.
    } 
}

 

9. 참조 자료형

변수의 자료형에는 기본 자료형과 참조 자료형이 있다.

ㅇ기본 자료형에는 앞서 포스팅한 것과 같이 boolean, char, short, int, long, float, double이 있으며,

참조 자료형에는 String, Student, Person 등이 있다.

 

참조 자료형클래스 형으로 선언하는 자료형을 의미한다.

 

예를 들어, 학생 클래스에 (학번, 이름, 국어 성적, 수학 성적, 수강 과목 이름)이 있다고 하자.

이때 수업에 대한 각 속성을 학생 클래스에 정의하지 않고, 수업이라는 클래스로 분리해서 사용하는 것이다.

그럼 과목참조 자료형으로 선언되어서 학생 클래스에서 사용될 수 있다.

 

10. 정보 은닉

클래스의 외부에서 클래스 내부의 멤버 변수나 메서드에 접근하지 못하게 하는 경우에 사용된다.

이를 통해 오류를 줄일 수 있다.

 

일반적인 경우에 멤버 변수는 private을 선언하여 외부에서 접근하지 못하게 하고,

메서드는 public으로 선언하여 외부에서도 사용할 수 있도록 한다.

 

그래서 멤버 변수를 외부에서 접근하지 않고 객체를 생성할 수 있도록 생성자를 사용한다.

또한, 생성자를 이용하면 객체를 한번에 초기화 할 수 있다.

package exercise.domain;

public class Student {
    private int    studentId;
    private String name;
    private int    grade;
    private String address;
    
    public void courseRegistration() {
        System.out.println("수강신청");
    }
    public void takeAClass() {
        System.out.println("수업듣기");
    }
    public void takeATest() {
        System.out.println("시험보기");
    }
    
    public void showStudentInfo() {
        System.out.println(name + ", " + address);
        System.out.println(studentId + ", " + grade);
    }
    
    //생성자
    public Student (int pStudentId, String pName, int pGrade, String pAddress) {
        studentId = pStudentId;
        name = pName;
        grade = pGrade;
        address = pAddress;
    }
}     
package exercise.test;
import exercise.domain.Student;

public class StudentTest {

    public static void main(String[] args) {
        Student stu1 = new Student(1224, "홍길동", 1, "서울특별시");  //생성자 함수 호출 
        Student stu2 = new Student(1225, "이순신", 2, "충무로");      //-> 객체 한번에 초기화
        //함수에서만 멤버 변수 접근하도록
        
        stu1.showStudentInfo();
        stu2.showStudentInfo();     //메서드 호출

 

**private 멤버 변수를 클래스 외부에서 접근할 때에는 get() / set() 메서드를 제공한다.

'Software > JAVA' 카테고리의 다른 글

[JAVA] 객체, 생성자, 계산기 예제  (0) 2021.01.11
[JAVA] 3의 배수의 합 구하기  (0) 2021.01.11
[JAVA] 조건문, 반복문  (0) 2021.01.10
[JAVA] 변수, 상수, 형변환, 연산자  (0) 2021.01.10
[JAVA] Eclipse 단축키  (0) 2021.01.10

1. 조건문

1) if 문

  • if, if - else

주로 조건식이 범위와 관련된 경우에 사용한다.

 

if (조건식1) {    
수행문1;
} else if (조건식2) { 
    수행문2;
} else {    
    수행문3;

 

(예제) 

int age = 9;
int charge = 0;

if (age < 8) {
    charge = 1000;
    System.out.println("미취학 아동입니다.");
} else if (age < 14) {
    charge = 2000;
    System.out.println("초등학생입니다.");
} else if (age < 20) {
    charge = 2400;
    System.out.println("중고등학생입니다.");
} else {
    charge = 3000;
    System.out.println("성인입니다.");
}

System.out.prinln("요금은 " + charge + "원 입니다.");

 

  • 조건 연산자 (삼항 연산자)

간단한 if - else 조건문을 조건 연산자로 구현할 수 있다. 

 

if (a > b)
    max = a;
else
    max = b;
max = (a > b) ? a : b;

 

2) switch - case 문

 

조건식의 결과가 특정 정수 값 또는 특정 문자열 값과 같을 경우 사용한다.

case문에서 수행문이 끝나면 반드시 break; 를 써줘야 한다. 그렇지 않으면 break;를 만날 때까지 계속 아래의 수행문을 수행한다. 

다음과 같이 여러 case를 한 번에 묶을 수도 있다.

 

(예제)

int month = 1;
int day = 0;

switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
    day = 31;
    break;
case 2: 
    day = 28;
    break;
case 4:
case 6:
case 9:
case 11:
    day = 30;
    break;
}

System.out.println("day = " + day);
final int Gold = 1;
final int Silver = 2;
final int Bronze = 3;
int medal = 1;

switch(medal) {
case Gold:
    System.out.println("금메달입니다.");
    break;
case Silver:
    System.out.println("은메달입니다.");
	break;
case Bronze:
    System.out.println("동메달입니다.");
    break;
default:
    System.out.println("금메달입니다.");
}

위와 같이 마지막에 default를 써줄 수도 있다. 위의 case를 모두 만족하지 않으면 default의 수행문이 실행된다.

JAVA 버전 7부터는 case 값에 문자열을 사용할 수 있지만, 위의 예제처럼 웬만하면 숫자로 비교하는 것이 좋다.

 

2. 반복문

1) while 문

 

조건이 "참"인 동안 수행문을 반복해서 수행한다.

주로 조건식이 true, false로 나타난다.

 

while (조건식) {

    수행문 1;

    ...

}

 

수행문2;

 

(예제)

int i = 0;
final int count = 10;
int sum = 0;

while (i <= count) {
    sum += i;
    ++i;
}

System.out.println("1부터 " + count + "까지의 합 = " + sum);

 

2) do - while 문

 

먼저 수행문을 한 번 수행하고 조건식을 체크한다.

수행문이 반드시 한 번 수행되어야 하는 경우에 사용한다.

 

do {

    수행문1;

    ...

} while (조건식); 

 

수행문2;

 

(예제)

int i = 2;

do {
    System.out.println(i);
    ++i;
} while (i < 1);

이 예제는 조건식이 처음부터 만족되지 않았지만, do 안에 있는 수행문은 한 번 실행된다.

 

3) for 문

 

가장 많이 사용되는 반복문으로, 주로 조건이 횟수인 경우에 사용한다.

for문 안에 초기식, 조건식, 증감식을 모두 쓰기 때문에 코드가 간결해질 수 있다.

for문 안에서만 쓰이는 변수는 초기식에서 선언과 초기화를 한번에 해주는 것이 좋다.

 

for (초기식 ; 조건식 ; 증감식) {

    수행문1;

    ...

}

 

수행문2;

 

(예제)

for (int num = 1; num <= 5; num++) {
    System.out.println(num);
}
for (int i = 1; i <= 9; i++) {
    System.out.println(i + "단");
    for (int j = 1; j <= 9; j++) {
        System.out.println(i + "x" + j + "=" + i*j);
    }
}

구구단 예제 코드이다.

int total = 0;
for (int i = 1; i <0 100; i++) {
    if (i % 2 ==0) continue;
    total += i;
    System.out.println(total + "i = " i);
}


total = 0;
for (int i = 1; i <= 100; i++) {
    if (i % 2 == 1) {
        total += i;
        System.out.println(total + "i = " i);
    }
}

위의 예제에서 continue;아래의 실행문을 실행하지 않고 증감식으로 넘어가라는 의미이다.

위의 for문과 아래의 for문은 100 이하의 홀수끼리만 더하라는 의미로 결과가 같은 코드이다.

 

int total = 0;
for (int i = 1; i <= 100; i++) { 
    if (i == 50) break;
    total += i;
    System.out.println(total + " i = " + i);
}

System.out.println("total = " + total);

위의 예제와 같이 for문에서 break; 를 쓰면 loop를 벗어난다. 즉, i가 50이 되면 그 이상 증가하지 않고 loop를 빠져나와서 아래의 print문을 실행하는 것이다.

 

'Software > JAVA' 카테고리의 다른 글

[JAVA] 3의 배수의 합 구하기  (0) 2021.01.11
[JAVA] 클래스와 객체  (0) 2021.01.10
[JAVA] 변수, 상수, 형변환, 연산자  (0) 2021.01.10
[JAVA] Eclipse 단축키  (0) 2021.01.10
[JAVA] Eclipse 설치  (0) 2021.01.10

1. 변수

변수는 프로그래밍에서 값(data)을 저장하기 위해 선언하는 것이다.

 

<특징>

1) 변수의 이름은 알파벳, 숫자, _ , $ 으로 구성된다.

2) 변수는 대소문자를 구분한다. 

3) 변수의 이름은 숫자로 시작할 수 없고, 키워드도 변수의 이름으로 사용할 수 없다.

4) 이름 사이에 공백이 있으면 안된다.

5) 변수명을 정할 때에는 변수의 역할에 어울리는 의미 있는 이름을 지어야 한다.

 

2. 자료형

 

  정수형 문자형 실수형 논리형
1 byte byte     boolean
2 byte short char    
4 byte int   float  
8 byte long   double  

 

변수가 저장되는 공간의 특성에 따라 자료형을 사용하여 변수를 선언해야 한다. 

그리고 변수를 선언하는 동시에 초기화해주는 것이 좋다.

ex) int num;

     float average = 0.2f;

 

3. 상수

상수는 변하지 않는 값을 선언하는 것이다.

상수를 선언할 때에는 변수 선언 앞에 final 키워드를 붙이면 된다.

ex) final double PI = 3.14;

     final int MAX_NUM = 100;

 

**max num을 변수와 상수로 정의할 때

변수 → int maxNum;

상수 → final int MAX_NUM;

 

이렇게 변수는 소문자로, 띄어쓰기 해야 할 부분을 대문자로 적어주고,

상수는 모두 대문자로 적고 띄어쓰기 해야 할 부분에 언더바( _ )를 적는다.

 

4. 리터럴

리터럴은 프로그램에서 사용하는 모든 숫자, 값, 논리값을 말한다.

예를 들면 10, 3.14, 'A', true 등이 있다.

리터럴에 해당하는 값은 특정 메모리 공간인 상수 풀 (constant pool)에 있으며 필요한 경우 여기서 가져와서 사용된다.

 

5. 형 변환

자료형은 각각 사용하는 메모리의 크기와 방식이 다르기 때문에 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다.

 

1) 묵시적 형 변환

작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우 자동으로 형 변환이 일어난다.

ex) long num = 3;  // long은 8byte 정수이고, 3은 4byte 정수인 int타입이다. long이 더 크기 때문에 3 뒤에 L을 명시할 필요가 없다.

 

2) 명시적 형 변환

묵시적 형 변환의 반대의 경우로, 변환되는 자료형을 명시해야 한다. 이때 자료의 손실이 발생할 수 있다.

ex) double dNum = 3.14;

     int num = (int) dNum;   // double이 실수형으로 정수형인 int보다 더 정밀하기 때문에, double타입인 dNum을 int타입인 num에 대입할 경우 dNum 앞에 (int)를 명시해야 한다.

 

6. 기본 연산자

 

대입 연산자 변수에 값을 대입 num = 10;
단항 연산자 항이 한 개 ++num;
이항 연산자 항이 두 개 num1 + num2;
삼항 연산자 항이 세 개 (5 > 3) ? 1 : 0;

 

  • 대입 연산자: 변수의 값을 대입하는 연산자로, 우선순위가 가장 낮다.
  • 부호 연산자: 양수 / 음수를 표현하거나 값의 부호를 변경한다. 변수 앞에 +, -를 사용한다고 해서 변수의 값이 변하는 것은 아니다. 변수의 값을 변경하려면 대입 연산자로 값을 변경해야 하고, 부호 연산자는 그 단계에서의 부호만 바꿔줄 뿐이다.
  • 산술 연산자: 사칙연산에 사용되는 연산자이다.

 

**사칙 연산자: +, -, *, /

** %는 나머지를 구하는 연산자 숫자 n의 나머지는 0 ~ n-1 범위의 수이므로 특정 범위 안의 수를 구할 때 자주 사용한다.

'Software > JAVA' 카테고리의 다른 글

[JAVA] 3의 배수의 합 구하기  (0) 2021.01.11
[JAVA] 클래스와 객체  (0) 2021.01.10
[JAVA] 조건문, 반복문  (0) 2021.01.10
[JAVA] Eclipse 단축키  (0) 2021.01.10
[JAVA] Eclipse 설치  (0) 2021.01.10
Alt + Left (Right) 이전, 이후 작업 화면
Alt + Shift + A 세로 블럭 지정이 가능한 모드로 변경
Alt + Shift + R Refactoring (이름 변경)
Alt + Shift + J 자동으로 주석 달기 (메소드나 멤버변수에 포커스 두고 실행)
Ctrl + Space 입력 보조장치 강제 호출
Ctrl + L 특정 줄로 번호 이동
Ctrl + K 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누름
Ctrl + / 라인 주석 설정 / 해제
Shift + Ctrl + / 블록 라인 주석 설정
Shift + Ctrl + \ 블록 라인 주석 해제

 

굵은 글씨는 지금까지 배우면서 자주 쓴 것이다.

'Software > JAVA' 카테고리의 다른 글

[JAVA] 3의 배수의 합 구하기  (0) 2021.01.11
[JAVA] 클래스와 객체  (0) 2021.01.10
[JAVA] 조건문, 반복문  (0) 2021.01.10
[JAVA] 변수, 상수, 형변환, 연산자  (0) 2021.01.10
[JAVA] Eclipse 설치  (0) 2021.01.10

1. JAVA 설치

https://www.oracle.com/java/technologies/javase-downloads.html

여기서 JDK 파일을 다운받으면 된다. 버전은 SE가 가장 기본적인 에디션이므로 이걸 다운받으면 된다.

 

2. 이클립스 설치

https://www.eclipse.org/

 

The Community for Open Innovation and Collaboration | The Eclipse Foundation

The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 375 open source projects, including runtimes, tools and frameworks.

www.eclipse.org

3. 이클립스 실행

1) 프로젝트 파일 생성

 

 

저기 화살표로 가리키는 New를 눌러서 가장 위에 있는 Java Project를 누르면 새 프로젝트를 만들 수 있다.

그러면 자기가 원하는 파일을 default location으로 지정할 수 있고, 프로젝트들이 그곳에 폴더 형식으로 저장이 된다.

 

 

2) Class 생성

 

프로젝트를 생성한 다음, 그 프로젝트 안에 class를 생성해야 한다.

JAVA는 한 파일에 하나의 클래스를 두는 것이 기본이다. 여러 개의 클래스가 존재할 경우 public 클래스는 한 개이다.

JAVA의 모든 코드는 클래스 내부에 위치하기 때문에, 필요에 따라 클래스를 생성하면 된다.

 

 

class를 누르면 다음과 같은 창이 뜬다.

 

 

Name 부분에 클래스 이름을 지정해주면 된다. 보통 첫글자와 띄어쓰기 부분을 대문자로 작성한다.

체크되어있는 부분은 main함수를 자동으로 생성해주는 부분이다. 

자동으로 체크되어있지 않고, 체크하지 않았더라도 main함수 부분에 그냥 저대로 작성해주면 된다.

 

 

class를 생성한 뒤 뜨는 창이다.

 

3) Hello, World!

 

Java의 print문은 System.out.println(); 이다.

오늘 배운 놀라운 점. sysout 까지만 치고 Ctrl + Space bar 를 누르면 자동으로 완성해준다. 개꿀.

 

 

코드를 작성하고 왼쪽 위에 있는 초록색 Run버튼을 누르면 저렇게 아래 콘솔에 실행이 된다. 

'Software > JAVA' 카테고리의 다른 글

[JAVA] 3의 배수의 합 구하기  (0) 2021.01.11
[JAVA] 클래스와 객체  (0) 2021.01.10
[JAVA] 조건문, 반복문  (0) 2021.01.10
[JAVA] 변수, 상수, 형변환, 연산자  (0) 2021.01.10
[JAVA] Eclipse 단축키  (0) 2021.01.10

1. MySQL 

MySQL은 오라클이 관리하고 배포하는 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)이다.

매우 빠르고 유연하며 사용하기 쉽다는 특징이 있다.

C, C++, 에펠, 자바, 펄, PHP, Python 스크립트 등을 위한 응용 프로그램 인터페이스(API)를 제공한다.

일반적인 웹 개발에 주로 이용되고 있으며, 상업적으로 사용할 때에는 상업용 라이선스를 구입해야 한다.

 

2. MySQL 설치하기

구글에 저렇게 검색한다.

 

6개 중 첫 번째에 있는 페이지로 들어가면

 

이러한 페이지가 뜬다. 64bit여도 그냥 저 두 번째에 있는 것을 다운로드하면 된다.

설치 페이지가 뜨면 기본적으로 설정되어있는대로 다음을 눌러주면 된다.

 

 

MySQL 서버에 접속할 때 사용할 비밀번호를 설정해주면 된다.

쭉 그대로 진행하면 [connect to server]라고 로그인을 하는 페이지가 뜬다.

그때 설정해준 비밀번호로 로그인을 하면 된다. 또 계속 NEXT 눌러주면

 

이제 MySQL을 실행하려면 MySQK Workbench를 실행해주면 된다.

 

 

이 회색 버튼을 눌러서 처음에 비밀번호를 입력해주면 다음부터는 그냥 접속이 가능하다. (save password 체크하기!)

 

그러면 이제 

 

 

이렇게 코드를 입력할 수 있게 나올 것이다. 준비 끝(ง˙∇˙)ว

'Database > SQL' 카테고리의 다른 글

[MySQL] SQL 옵티마이저  (0) 2021.01.18
[MySQL] 데이터 제어어 : DCL  (0) 2021.01.18
[MySQL] Titanic 예제  (0) 2021.01.11
[MySQL] University DB 예제  (0) 2021.01.10
[MySQL] 데이터베이스 개념  (0) 2021.01.10

1. 데이터베이스

데이터베이스는 정보 시스템 내부에서 데이터를 저장하고 있다가 필요할 때 제공하는 역할을 담당한다.

 

정보시스템은 조직 운영에 필요한 데이터를 수집하여 저장해두었다가 필요할 때 유용한 정보를 만들어주는 수단이다.

데이터베이스는 특정 조직의 여러 사용자가 공유하여 사용할 수 있도록 통합해서 저장한 운영데이터의 집합체이다.

특징으로는 1) 실시간 접근, 2) 계속 변화, 3) 내용 기반, 4) 동시 공유 가 있다.

 

데이터베이스 관리 시스템(DBMS)은 데이터베이스를 생성하여 안정적이고 효율적으로 운영하는데 필요한 기능들을 제공하는 소프트웨어이다.

DBMS의 종류에는 RDBMS(관계형 데이터베이스)와 NoSQL(Non SQL 또는 Non relational)이 있다.

 

1) RDBMS

RDBMS는 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템인데, 관계형 모델은 술어 논리와 집합론에 기반을 두어 데이터를 "관계로서" 표현한다.

즉, 행과 열의 집합으로 구성된 테이블 묶음 형식으로 데이터를 제공한다. 

그리고 테이블 형식의 데이터를 조작할 수 있는 관계 연산자가 SQL이다. RDBMS는 SQL을 제공한다.

RDBMS에서는 '무결성 원칙'이 가장 중요한데, 이는 데이터베이스에 정확한 데이터가 유지되고 있음을 보장하는 것이다.

RDBMS의 종류로는 MySQL, Microsoft SQL Server가 있다.

 

2) NoSQL

NoSQL의 데이터베이스는 전통적인 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.

빅데이터, 대량 트래픽 저장과 동시성이 높은 조회에 뛰어나다.

"많은 사용자들이 늘 동일한 데이터를 보지 않아도 된다"는 전제 하에 개발되었다.

NoSQL의 종류로는 mongoDB, cassandra, redis가 있다.

mongoDB는 문서 등의 대용량 파일에 적합하다.

cassandra는 data 속성을 특정 값으로 하나의 컬럼에 넣는다는 특징이 있다.

redis는 <key-value> 메모리성 데이터베이스로 "=" 연산을 빠르게 할 수 있다는 특징이 있다.

 

2. 관계 데이터 모델

데이터 모델링이란 현실 세계에 존재하는 데이터를 컴퓨터 세계의 데이터베이스로 옮기는 변환 과정이다.

 

관계 데이터 모델은 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델이다.

하나의 개체에 대한 데이터를 하나의 릴레이션(Relation)에 저장한다.

 

릴레이션이란 하나의 개체에 관한 데이터를 2차원 데이블의 구조로 저장한 것이다. 

 

학번 학생이름 주소 생년월일 전공번호 휴학여부
INT VARCHAR VARCHAR CHAR INT CHAR
1578398 홍길동 전라남도 광주시 19980823 123 N
1628739 이지은 경상북도 대구 20001201 107 Y

위의 예시가 하나의 릴레이션이고, 현재 두 개의 개체가 저장되어 있다.

 

① 관계 데이터 모델의 기본 용어

1) 속성 attribute (열) : 파일 관리 시스템 관점에서 '필드'에 대응

2) 투플 tuple (행): 파일 관리 시스템 관점에서 '레코드'에 대응

3) 도메인 domain: 일반적으로 속성의 특성을 고려한 데이터 타입으로 정의

                        속성 값을 입력 및 수정할 때 적합성의 판단 기준이 됨

 

위의 예시에서 학번, 학생이름, 주소, 생년월일, 전공번호, 휴학여부가 속성이다.

홍길동, 이지은이 투플이며, INT, VARCHAR, CHAR가 도메인이다.

 

 

② 릴레이션의 구성

1) 릴레이션 스키마

릴레이션 스키마는 릴레이션의 논리적 구조로, 릴레이션의 이름과 릴레이션에 포함된 모든 속성 이름으로 정의된다.

정적인 특징이 있다. (한번 만들어지면 거의 변경이 없다.)

ex) 학생 (학번, 학생이름, 주소, 생년월일, 전공번호, 휴학여부)

 

2) 릴레이션 인스턴스

릴레이션 인스턴스는 어느 한 시점에 릴레이션에 존재하는 투플들의 집합으로, 동적인 특징이 있다.

위의 예시에서는 학생 한 명 한 명이 각각 인스턴스가 된다.

 

 

③ 데이터베이스의 구성

1) 데이터베이스 스키마

데이터베이스 스키마는 데이터베이스의 전체 구조로, 데이터베이스를 구성하는 각각의 릴레이션 스키마의 모음이다.

 

2) 데이터베이스 인스턴스

데이터베이스 인스턴스는 데이터베이스를 구성하는 각각의 릴레이션 인스턴스의 모음이다.

 

 

④ 릴레이션의 특성

1) 투플의 유일성: 하나의 릴레이션에는 동일한 투플이 존재할 수 없다. (모든 속성의 값이 동일한 투플 X)

2) 투플의 무순서: 하나의 릴레이션에서 투플 사이의 순서는 무의미하다.

3) 속성의 무순서: 하나의 릴레이션에서 속성 사이의 순서는 무의미하다.

4) 속성의 원자성: 속성 값으로 원자 값만 사용할 수 있다.

(더이상 분해할 수 없는 속성 = 단순 속성 -> data의 일관성)

단순속성 ↔ 복합 속성 ex) 주소는 '시', '도', '군' 의 단순 속성 여러 개를 활용하여 구현이 가능하다.

 

 

키(KEY) 정의와 특성

1) 키의 정의: 릴레이션에서 투플들을 유일하게 구별하는 속성 또는 속성들의 집합

2) 키의 특성

 - 유일성: 하나의 릴레이션에서 모든 투플은 서로 다른 키 값을 가져야 한다.

 - 최소성: 꼭 필요한 최소한의 속성들로만 키를 구성해야 한다.

 

⑥ 키의 종류와 관계

1) 수퍼키(super key): 유일성을 만족하는 속성 또는 속성들의 집합

2) 후보키(candidate key): 유일성과 최소성을 만족하는 속성 또는 속성들의 집합

3) 기본키(primary key): 후보키 중에서 기본적으로 사용하기 위해 선택한 키

4) 대체키(alternate key): 기본키로 선택되지 못한 후보키

출처) 숙명여자대학교 비교과 프로그램 '데이터베이스와 SQL' 강의자료

 

5) 외래키(foreign key): 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합

                              릴레이션들 간의 관계를 표현

'Database > SQL' 카테고리의 다른 글

[MySQL] SQL 옵티마이저  (0) 2021.01.18
[MySQL] 데이터 제어어 : DCL  (0) 2021.01.18
[MySQL] Titanic 예제  (0) 2021.01.11
[MySQL] University DB 예제  (0) 2021.01.10
[MySQL] MySQL 설치하기  (0) 2021.01.10

+ Recent posts