SELECT FNAME, LNAME,SALARY FROM EMP WHERE DNO=1005;
22년 3회
18. SQL에 대한 다음 설명에서 괄호에 들어갈 알맞은 명령어를 쓰시오.
SQL의 하나인 DDL은 DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어로, 다음 3가지 명령어를 사용하여 표현한다. ( 가 ) : 스키마, 도메인, 테이블 등의 개체를 정의하는 데 사용하는 명령어 ( 나 ) : 개체에 대한 정의를 변경하는 데 사용하는 명령어 ( 다 ) : 스키마, 도메인, 테이블 등의 개체를 삭제하는 데 사용하는 명령어
19. 다음은 Company 테이블을 생성하는 SQL문이다. company 테이블의 TITLE 속성에는 Intern, Staff, Manager, Director, President 값만 허용할 수 있도록 <SQL문> (가) 와 (나)에 적합한 단어를 쓰시오
CREATE TABLE COMPANY(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
TITLE VARCHAR(20) (가) (TITLE(나) ('Intern','Staff','Manager','Director','President'))
);
지갑안에 신용카드(credit)와 신분증(id)이 있고 카드(card)를 가지고 있다. 대중교통을 이용하는데 지갑 안에 현급(cash)이 있다면 택시를 이용하고 현금이 없는 경우 카드가 있는지 확인하고 카드가 있다면 버스를 이용한다 만약 현금과 카드 둘다 없다면 도보를 이용한다
class Test {
public static void main(String args[]) {
int a=26;
int b=91;
int g=0;
int c=a<b?a:b;
for(int i=1; i<c;i++){
if(a%i==0 && b%i==0)
g=i;
}
System.out.print(g);
}
}
class Main {
public static void main(String args[]) {
int[] a=new int[8];
int i=0;
int n=11;
while(n>0){
a[i++]=n%2;
n/=2;
}
for(i=7;i>=0;i--)
System.out.print("%d",a[i]);
}
}
public class Main {
static int a = 0;
static int func(int t) {
a = a+t;
return a;
}
public static void main(String[] args) {
for(int i=0; i<5; i++) {
func(i);
}
System.out.print(a);
}
}
class A {
int f(int a, int b) {
return a+b;
}
}
public class Main {
public static void main(String[] args) {
A a = new A();
System.out.print(a.f(25, 25));
}
}
#include<stdio.h>
int main() {
int d = 55;
int n = 4;
int r = 0, q = 0;
r = d;
while(r >= 4) {
r = r - n;
q++;
}
printf("%d 그리고 ", q);
printf("%d", r);
}
#include<stdio.h>
int compare(int i, int j, int *ma, int *in) {
if(i>j) {
*ma = j;
*in = i;
}
else {
*ma = i;
*in = j;
}
}
int main() {
int max = 0;
int min = 0;
compare(3, 7, (가), (나));
printf("작은수:%d 큰수:%d", max, min);
}
#include<stdio.h>
int main() {
int d = 55;
int n = 4;
int r = 0, q = 0;
r = d;
while(r >= 4) {
r = r - n;
q++;
}
printf("%d 그리고 ", q);
printf("%d", r);
}
<보기> ㄱ. 제품의 내부 요소들이 명세서에 따라 수행되고 충분히 실행되는 가를 보장하기 위한 검사이다 ㄴ. 각 기능별로 적절한 정보 영역을 정하여 적합한 입력에 대한 출력의 정확성을 점검한다 ㄷ. 프로그램의 구조에 의거하여 테스트 하는 것이다 ㄹ. 요구사항 명세서에 기술되어 있는 소프트웨어 기능을 토대로 실시하는 테스트이다
① 하나의 주기억장치에 여러 개의 프로그램을 동시에 처리하는 방식 ② 자료나 정보 단위들이 발생할 때마다 즉각적으로 처리하는 것이 아니라 일정량 또는 일정 기간 동안 모아 두었다가 한꺼번에 처리하는 방식 ③ CPU의 전체 사용 시간을 작은 작업 시간량으로 나누어서 그 시간량 동안만 번갈아가면서 CPU를 할당하여 각 작업을 처리하는 방식 ④ 컴퓨터 시스템에 여러 개의 프로세스(CPU)를 사용하여 처리하는 방식
<보기> ㄱ. 일괄 처리시스템 ㄴ. 다중 프로그래밍 시스템 ㄷ. 시분할 시스템 ㄹ. 다중 처리 시스템
1. 한 릴레이션에서 조건에 만족하는 튜플들의 부분 집합을 구한다 2. 한 릴레이션의 속성들의 부분집합을 구한다 3. 두 릴레이션 모두에 속한 튜플들로 이루어진 릴레이션을 생성한다 4. 두 릴레이션 중 하나의 릴레이션에는 속하지만 다른 하나의 릴레이션에는 속하지 않는 튜플들로 이루어진 릴레이션을 생성한다.
IP 프로토콜 위에서 연결형 서비스를 지원하는 프로토콜로 데이터를 세그먼트라는 블록 단위로 분할해 전송하며 전이중 방식의 양방향 가상 회선을 제공하기 때문에 신뢰성 있는 데이터 전송을 보장하며 흐름 제어 기능과 혼잡 제어 기능을 지원하여 네트워크에서의 데이터 전달 통제가 가능한 프로토콜
1. 데이터 조작어(삽입, 삭제, 수정, 검색) 요청을 분석하여 런타임 데이터베이스 처리기가 이해할 수 있도로 해석한다 2. 데이터베이스에 접근하는 과정에서 사용자의 접근 권한이 유효한지 검사하고 데이터베이스 무결성을 유지하기 위한 제약조건 위반 여부를 확인한다. 회복이나 병행 수행과 관련된 작업도 한다.
19. 다음은 Company 테이블을 생성하는 SQL문이다. company 테이블의 TITLE 속성에는 Intern, Staff, Manager, Director, President 값만 허용할 수 있도록 <SQL문> (가) 와 (나)에 적합한 단어를 쓰시오
CREATE TABLE COMPANY(
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
TITLE VARCHAR(20) (가) (TITLE(나) ('Intern','Staff','Manager','Director','President'))
);
지갑안에 신용카드(credit)와 신분증(id)이 있고 카드(card)를 가지고 있다. 대중교통을 이용하는데 지갑 안에 현급(cash)이 있다면 택시를 이용하고 현금이 없는 경우 카드가 있는지 확인하고 카드가 있다면 버스를 이용한다 만약 현금과 카드 둘다 없다면 도보를 이용한다
package test;
class Book {
private String title;
public int price;
public String company;
public String author;
public String getTitle(){
return title;
}
public void getTitle(String title){
this.title= title;
}
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
science.getTitle("안녕");
System.out.println(science.getTitle());
Book english = new Book();
english.getTitle("안녕안녕");
System.out.println(english.getTitle());
}
}
1-1) 생성자에서 다른 생성자를 호출하는 this
아래와 같이 클래스에 생성자가 여러 개 있을 때 this라는 예약어를 통해 이 클래스의 다른 생성자를 호출할 수 있다
Book()생성자에서 this("1번째 책")을 사용해 Book(String title) 생성자를 호출한 것이다
package test;
class Book {
public String title;
public int price;
public String company;
public String author;
public Book(){
this("1번째책");
}
public Book(String title){
this.title= title;
}
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
System.out.println(science.title);
}
}
1-2) 자신의 주소를 반환하는 this도 있는데 이 부분은 생략한다
2. static 변수
static 변수는 C언어에서 봤던 개념과 거의 똑같다.
프로그램이 실행되어 메모리에 올라갔을 때 딱 한번만 메모리 공간이 할당되며 그 값은 모든 인스턴스가 공유한다
아래 예문의 결과값을 예상해보자.
package test;
class Book {
public int a=2;
static public int b=3;
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
Book english = new Book();
english.a++;
System.out.println(science.a);
english.b++;
System.out.println(science.b);
science.a++;
System.out.println(english.a);
science.b++;
System.out.println(english.b);
}
}
*이 게시글에서는 속성=필드=객체변수=인스턴스 변수=멤버변수라고 불리는 것을 객체 변수라고 통일하겠다.
1. 객체 생성
앞선 2탄에서 클래스, 객체, 메서드, 메모리 구조에 대해 살펴 보았다.
클래스는 책을 예를 들어 책이라는 자료형을 만들기 위해 구성요소(제목, 가격, 출판사, 저자등)를 하나로 합쳐놓은 것이다.
책이라는 객체의 구성요소를 사용하기 위해 책이라는 자료형을 클래스로 만들었다면 그 구성요소를 이용해서 다양한 책(객체)을 만들어야 하지 않겠는가
자바에서는 Book science = new Book(); 이런 형태로 객체를 만들 수 있다.
이렇게 클래스를 이용해서 만든 객체 여기서는 science를 인스턴스라고 한다.
클래스는 붕어빵 틀, 객체는 붕어빵1,2 ... 이라고 생각하면 된다
package test;
class Book {
public String title;
public int price;
public String company;
public String author;
public String getTitle(){
return title;
}
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
Book english = new Book();
}
}
science앞에 붙은 Book은 int, String처럼 Book이라는 자료형이라는 표시이므로
Book자료형 science를 선언한다는 의미이다.
Book science는 int a와 동일한 형태이다
뒤에 붙은 new Book()에서 new는 새로만들어진다는 예약어이고 뒤에 나오는 Book()은 생성자(Constructor)라고 불리는 녀석이다.
Book science = new Book()은 즉 science라는 책 객체를 만든다는 의미인 것이다.
생성자얘기는 나중에 하고 우선 객체를 생성할 때 메모리에 어떻게 동작되는지 알아보자.
2. 객체 생성시 메모리 구조(heap영역)
살짝 복습하면 static이라고 붙은 메서드를 로딩하는데 거기서 제일 먼저 로딩되는 것이 main메서드이다. 위의 코드를 예를 들어 Test class의 main메서드가 제일 먼저 메모리에 로드돼서 호출된다.
호출되면 stack 영역에 들어가는데 이 메인메서드 안에는 Book science라는 변수가 선언돼있다.
이때 science라는 변수를 참조변수라고 한다.(참조변수이긴 하지만 동시에 지역변수이기도 하다)
Book science를 선언하고 new 예약어와 함께 Book()이라는 생성자를 호출하면 Heap영역이라는 메모리 공간에 science라는 객체가 하나 생성된다.
science라는 참조변수는 Heap 영역에 있는 science객체의 주소를 가리킨다.
science 객체 안에는 이런식으로 객체가 만들어져있고 science라는 참조변수는 Book객체(science)의 주소를 가리킨다.
여기서 getTitle()이라는 메서드는 실제 위치는 method 영역에 들어있지만 getName() 메서드의 주소로 메서드 영역의 getTitle()과 연결돼있다.
최종적으로 정리하면 Book science = new Book()이라고 하면 heap영역에 science객체(인스턴스)가 생성되고 science라는 참조변수는 heap영역의 science 객체(인스턴스)의 주소를 가리킨다
이렇게 객체를 생성하고 나면 그 객체의 이름인 참조변수를 이용해 객체 변수와 메서드를 사용할 수 있다
위의 예문 처럼 science.title 이렇게 도트 연산자를 이용해 각 객체의 객체변수와 메서드에 접근할 수 있게 된다
package test;
class Book {
public String title;
public int price;
public String company;
public String author;
public String getTitle(){
return title;
}
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
Book english = new Book();
science.title="개미와배짱이";
System.out.println(science.title); //개미와배짱이 출력
System.out.println(science.getTitle()); //개미와배짱이 출력
}
}
앞에서 봤던 아래 예문도 객체를 이용하면 hello메서드를 static 예약어 없이 호출가능하다
*static 포함한 경우
package test;
public class Test {
public static void main(String[] args) {
int a=3;
System.out.println(hello(a));
System.out.println(a);
}
public static int hello(int a) {
a=7;
return a;
}
}
*static을 사용하지 않은 경우
package test;
public class Test {
public static void main(String[] args) {
int a=3;
Test test1 = new Test();
System.out.println(test1.hello(a));
System.out.println(a);
}
public int hello(int a) {
a=7;
return a;
}
}
3. 생성자(Constructor)
Book science = new Book();에서
new 예약어 뒤에 붙은 Book()을 생성자라고 한다
생성자가 하는 일은 객체(인스턴스)를 heap영역에 생성하고 클래스 안에 Book() 생성자의 {}중괄호를 호출하는 역할을 하는데 객체가 생성될 때 객체 변수 값들을 초기화하는 역할도 한다
즉, science의 title과 english의 title은 다르게 설정된다는 것이다
package test;
class Book {
public String title;
public int price;
public String company;
public String author;
public String getTitle(){
return title;
}
public Book() {} //기본 생성자
public class Test {
public static void main(String[] args) {
Book science = new Book();
Book english = new Book();
}
}
생성자는 객체를 생성할 때만 호출되는데 생성자 이름은 클래스 이름과 같고 반환값이 없다
생성자가 없는 클래스는 클래스 파일을 컴파일할 때 자바 컴파일러에서 자동으로 생성자를 만들어주는데 이렇게 자동으로 생성되는 생성자를 기본 생성자(default constructor)이라고 한다
개발자가 매개변수가 있는 생성자를 따로 만들면 자동으로 기본 생성자가 생성이 되지 않아 기본생성자를 만들어줘야 한다
아래에 public Book(String title){}이 바로 매개변수가 있는 생성자이다
이렇게 클래스에 생성자가 두 개 이상 제공되는 경우를 생성자 오버로딩이라고 한다
자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있는데 이를 오버로딩이라고 한다
아래에 나오는 this라는 예약어는 객체 자신을 가리키는 예약어인데 우선 이런게 있다고 알고 넘어가자.
아무튼 자바의 한 클래스내에 생성자가 두 개 이상이 있으면 인스턴스를 생성할 때 원하는 생성자를 골라서 만들 수 있다
package test;
class Book {
public String title;
public int price;
public String company;
public String author;
public String getTitle(){
return title;
}
public Book() {} //기본 생성자
public Book(String title) {
this.title=title;
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
Book english = new Book();
}
}
4. 접근제어자(access modifier)
자바에서는 예약어를 사용해서 클래스 내부의 변수, 메서드, 생성자에 대한 접근 권한을 지정할 수 있다.
이런 예약어를 접근 제어자라고 한다
접근제어자에는 private, protected, default, public 이렇게 4종류가 있다
위 코드의 객체 변수 String title에 접근 제어자를 private으로 바꾸면 동일한 클래스를 제외하고는 이 변수에 직접적으로 접근할 수 없다
그래서 이를 접근하기 위해서는 메서드를 만들면 된다.
직접적으로 접근을 할 수 없으니 Book 제목을 받아오거나 지정할 수 있도록 메서드를 사용한다.
package test;
class Book {
private String title;
public int price;
public String company;
public String author;
public String getTitle(){
return title;
}
public void getTitle(String title){
this.title= title;
}
}
public class Test {
public static void main(String[] args) {
Book science = new Book();
//science.title="바보"; //오류발생 //접근 불가
science.getTitle("안녕");
System.out.println(science.getTitle());
}
}
정보처리기사 실기에서는 어차피 거의 대부분이 동일한 클래스로 나오므로 사실 잘 몰라도 상관없다
위의 코드는 getTitle이라는 메서드가 오버로딩돼있는 것인데
getTitle을 호출할 때 매개변수가 없으면 public String getTitle()을 호출하는 것이고
매개변수가 있으면 public String getTitle(String title)을 호출하는 것이다