생성자(constructor)
- 생성자의 이름은 항상 클래스의 이름과 동일해야 하며 필요한 경우 인수를 받아들이거나 중복정의가 가능하지만 리턴 값을 가질 수 없다.
- 생성자는 일반 다른 메소드 들처럼 호출될 수 없고 new 연산자를 이용하여 객체를 생성하기 위해 호출되며, 각 클래스의 인스턴스의 객체를 생성한 후에 생성된 객체의 멤버를 초기화시키는 작업을 수행한다.
- 생성자 내부에서 다른 생성자를 호출할 수 있다. 단, 생성자 내부에서 가장 먼저 실행되어야 한다.
Public class 클래스명
{
Public 클래스명()
{
}
클래스명( ) // 접근제어지시자가 default이기 때문에 다른 곳에서 인스턴스 생성할 수 없다
{
}
}
class 클래스명 // 같은 패키지에서만 가능, 상속받았거나
{
Public 클래스명() //
{
}
}
public class 클래스명
{
Public 클래스명()
{
//텅빈
}
// 디폴트 생성자는 속해있는 클래스의 지시자와 동일하게 생성된다.
}
Public class 클래스명2
{
Public static void main(String[] args){
클래스명 ob = new 클래스명(); //자동 디폴트 생성자 때문에 생성됨
}
}
Public class 클래스명
{
Public 클래스명()
{
}
클래스명( ) // 접근제어지시자가 default이기 때문에 다른 곳에서 인스턴스 생성할 수 없다
{
}
}
class 클래스명 // 같은 패키지에서만 가능, 상속받았거나
{
Public 클래스명() //
{
}
}
public class 클래스명
{
Public 클래스명()
{
//텅빈
}
// 디폴트 생성자는 속해있는 클래스의 지시자와 동일하게 생성된다.
}
Public class 클래스명2
{
Public static void main(String[] args){
클래스명 ob = new 클래스명(); //자동 디폴트 생성자 때문에 생성됨
}
}
[실습] 생성자와 초기화 블럭(Initialized Block)
/*========================================================
* ■■■ 클래스와 인스턴스 ■■■
* - 생성자(constructor)와 초기화 블럭(Initialized Block)
* 2017.01.04
========================================================== */
package com.test;
public class Test07
{
/*
int n;
int m;
n = 7;
m = 10;
메소드 안에서만 가능하지만 기능으로 분류되서 클래스에서 가능하지 않음
// 초기화 블럭(ini...)
{
n=7;
m=10;
}
*/
int n;
int m;
// 초기화 블럭(ini...)
{
n = 7;
m = 10;
System.out.println("초기화블럭");
}
// 생성자가 나중에 불려져 생성자가 초기화시킨값으로 객체변수가 초기화되는 것을 확인할 수 있다.
Test07(int n, int m){
this.n = n;
this.m = m;
System.out.println("인자 있는 생성자..");
}
Test07(){
System.out.println("인자 없는 생성자..");
}
void write()
{
System.out.printf("n : %d, m: %d\n", n,m);
}
public static void main(String[] args)
{
Test07 ob1 = new Test07();
Test07 ob2 = new Test07(10, 100);
ob2.write();
}
}
/*========================================================
* ■■■ 클래스와 인스턴스 ■■■
* - 생성자(constructor)와 초기화 블럭(Initialized Block)
* 2017.01.04
========================================================== */
package com.test;
public class Test07
{
/*
int n;
int m;
n = 7;
m = 10;
메소드 안에서만 가능하지만 기능으로 분류되서 클래스에서 가능하지 않음
// 초기화 블럭(ini...)
{
n=7;
m=10;
}
*/
int n;
int m;
// 초기화 블럭(ini...)
{
n = 7;
m = 10;
System.out.println("초기화블럭");
}
// 생성자가 나중에 불려져 생성자가 초기화시킨값으로 객체변수가 초기화되는 것을 확인할 수 있다.
Test07(int n, int m){
this.n = n;
this.m = m;
System.out.println("인자 있는 생성자..");
}
Test07(){
System.out.println("인자 없는 생성자..");
}
void write()
{
System.out.printf("n : %d, m: %d\n", n,m);
}
public static void main(String[] args)
{
Test07 ob1 = new Test07();
Test07 ob2 = new Test07(10, 100);
ob2.write();
}
}
생성자(constructor)와 초기화 블록(Initialized Block): 초기화 블록보다는 생성자가 나중에 불러져 생성자가 초기화시킨 값으로 객체변수가 초기화되는 것을 확인할 수 있다.
상속(inheritance)
- 상속의 개요
클래스를 재사용할 수 있도록 파생시키는 방법.
※ 파생의 사전적 의미 : 사물이 어떤 근원으로부터 갈려 나와 생김. 단, 우리는 상속을 코드의 재사용(재활용)의 관점으로만 이해하려 하지말자.
- 상속의 특징
- 상속은 자식 클래스가 부모 클래스를 선택하는 과정이다.
- 부모 클래스는 누가 자신을 부모로 지정했는지 알 수가 없다.
- 상속을 지정하면 부모 클래스의 멤버를 자식 클래스가 상속받음으로 공유(public, protected 멤버) 하게 된다.
- 자식 클래스는 부모 클래스의 멤버와 무관하게 자기만의 멤버를 추가할 수 있다.
- 자식 클래스는 부모 클래스의 멤버를 재정의(오버라이딩 : Overriding)할 수 있다.
- [extends 상위클래스명] 표기를 클래스 설계할 때 추가하면 된다.
- 자바의 모든 클래스는 Object 클래스를 자동 상속받도록 되어 있다.
- 부모 클래스는 자기 자신 도는 자기의 멤버를 부모로 지정하지 못하도록 막을 수 있다.(final 키워드)
- 생성자와 초기화 블럭은 상속 대상에서 제외된다.
- 형식 및 구조
public class 클래스명 extends 상위클래스명
{
// 상위 클래스의 멤버들을 하위 클래스가 공유하게 된다.
// 또한 자기만의 고유한 멤버들을 추가할 수 있다.
}
public class Test08 //extends Object, 자바는 단일상속만 허용한다, Object는 조상 클래스다, 인터페이스는 인터페이스를 상속받을 때 다중상속이 허용된다
※ main() 메소드를 제외하고 아무런 멤버가 없는 상태의 클래스를 설계한 상태이다. 하지만, 기본 멤버가 이미 존재하는 상태이다.
(Object 클래스가 가지고 있는 멤버)모~~~~~~~~~든 클래스는 Object 클래스를 자동으로 상속받게된다. 즉, Object 클래스의 멤버를 하위 클래스에서 사용하는 것이 가능하다는 의미이다.
[실습] 상속(inheritance)
/*==============================
* ■■■ 클래스 고급 ■■■
* - 상속(inheritance)
* 2017.01.04
================================ */
package com.test;
import javax.security.auth.Subject;
// 부모클래스. 상위클래스, 슈퍼클래스
class SuperTest09
{
private int a=5;
protected int b=10;
public int c = 20;
public void write() {
System.out.println("Super write() 메소드 : "+a+","+b+","+c);
}
}
// 자식클래스, 하위클래스, 서브클래스
class SubTest09 extends SuperTest09
{
/*
protected int b=10;
public int c = 20;
public void write() {
System.out.println("Super write() 메소드 : "+a+","+b+","+c);
}
*/
int b = 100;
public void print()
{
System.out.println("Sub print() 메소드: ");
}
@Override
public void write() {
System.out.println("Super write() 메소드 : "+"a"+b+","+c);
}
}
// main() 메소드를 포함하는 외부 클래스
public class Test09
{
public static void main(String[] args)
{
SubTest09 ob = new SubTest09();
ob.write();
ob.print();
}
}
/*==============================
* ■■■ 클래스 고급 ■■■
* - 상속(inheritance)
* 2017.01.04
================================ */
package com.test;
import javax.security.auth.Subject;
// 부모클래스. 상위클래스, 슈퍼클래스
class SuperTest09
{
private int a=5;
protected int b=10;
public int c = 20;
public void write() {
System.out.println("Super write() 메소드 : "+a+","+b+","+c);
}
}
// 자식클래스, 하위클래스, 서브클래스
class SubTest09 extends SuperTest09
{
/*
protected int b=10;
public int c = 20;
public void write() {
System.out.println("Super write() 메소드 : "+a+","+b+","+c);
}
*/
int b = 100;
public void print()
{
System.out.println("Sub print() 메소드: ");
}
@Override
public void write() {
System.out.println("Super write() 메소드 : "+"a"+b+","+c);
}
}
// main() 메소드를 포함하는 외부 클래스
public class Test09
{
public static void main(String[] args)
{
SubTest09 ob = new SubTest09();
ob.write();
ob.print();
}
}
※ Override(재정의) : 상위 클래스에 정의된 메소드를 재정의(다형성 문법의 토대)
- 메소드의 원형, 이름, 인자의 갯수 및 자료형이 모두 동일해야 한다.
- 접근제어 지시자는 클 수는 있어도 작을 수는 없다.
- 인자의 갯수나 자료형이 다른 경우가 되어버리면 Overloading 이 된다.
[@Override] : annotation(JDK1.5) → 프로그램의 metadata
컴파일러나 외부 틀에서 프로그램에 대한 부가적인 설명을 제공하기 위해 사용되며 다른 주석은 컴파일 과정에서 제거되지만 annotation어노테이션은 제거되지 않는다.
******Overloading(중복 정의) 매개변수로 구분
******Overriding(재정의) 매개변수, 자료형 똑같이 일치해야 한다, 자동차 튜닝, 튜닝하지 말아야 할 것들은 final로 정의
******Overriding을 하면 부모 클래스의 메소드는 덮어지지만 부모 변수와 자식 변수는 메모리할당을 따로 한다.
추상클래스(abstract)
추상 클래스(abstract) 개요
- 메모리의 낭비 없이 메소드를 재정의해서 사용하도록 설계된 클래스. (뼈대만 물러준다는 이야기)
- 클래스 내부에 추상 메소드가 존재하면 이 클래스는 추상 클래스가 되며 반드시 class 앞 [abstract]를 명시해야 한다. (추상(미완성) 메소드가 하나라도 있으면 추상 클래스)
- 추상 클래스는 추상 메소드를 포함할 수 있으나 반드시 포함해야 하는 것은 아니며, 이 경우에도 [abstract] 키워드를 포함한 클래스는 추상 클래스로 간주한다.
- [abstract] 키워드는 클래스와 메소드에서만 사용할 수 있으며 멤버 변수에서는 사용할 수 없다.
- [abstract] 키워드는 [final], [static] 과 함께 사용할 수 없다.
- 추상 클래스는 객체를 생성할 수 없다.
- 추상 클래스는 상속받은 하위(자식) 클래스는 추상 클래스가 가지고 있는 추상 메소드를 오버라이딩(Overriding) 해야 하며, 이 의무를 다하지 않을 경우 그 클래스마저 추상 클래스가 된다. 상속을 전제하에 만들어진 클래스
[실습] 추상클래스(abstract)
/*======================================
* ■■■ 추상 클래스(abstract) ■■■
* 2017.01.04
========================================*/
package com.test;
//추상 클래스
abstract class AbstractTest10
{
// int 배열 변수 선언 → private화 → 정보은닉
private int[] value;
// 매개변수로 넘겨받은 int 배열로 멤버를 초기화한 후
// 정렬 구현 메소드를 호출하는 기능을 가진 메소드
public void sort(int[] value)
{
this.value = value;
sorting();
}
// 메소드 호출문으로 착각하면 안된다. 정의하다만 메소드-> 추상메소드
// 정렬을 구현하는 기능을 가진 메소드
// -- 정의하지 않고... 필요하다는 사실로 인해 선언만 해둔 상태
// -- 즉, 추상 메소드~!!!
protected abstract void sorting();
// 배열의 길이를 확인하는 기능을 가진 메소드
protected int length()
{
if (value == null)
{
return 0;
}
return value.length;
}
// 크기를 비교하는 기능을 가진 메소드
protected int compare(int i, int j)
{
if (value[i] == value[j])
{
return 0;
} else if (value[i] > value[j])
{
return 1;
} else
{
return -1;
}
}
// 자리 바꿈 기능을 가진 메소드
protected void swap(int i, int j)
{
int temp;
temp = value[i];
value[i] = value[j];
value[j] = temp;
}
// 결과 출력을 위해 만들어 놓은 출력 기능을 가진 메소드
public void print()
{
if (value == null)
{
return;
}
for (int n : value)
{
System.out.printf("%5d", n);
}
System.out.println();
}
}
// ① 추상 클래스를 상속받은 추상 클래스...
// ② 추상 클래스가 소유하고 있는 추상 메소드(sorting())를
// 재정의함으로써 일반 클래스의 형태로 변화
// abstract class SortTest10 extends AbstractTest10
class SortTest10 extends AbstractTest10
{
// 이 추상 클래스가...(SortTest10)
// 추상 클래스 라는 꼬리표를 떼기 위해서는...
// 『sorting()』 메소드를 → 추상 메소드... 를 오버라이딩(Overriding) 해서
// 완성된 형태로 기능하는 메소드로 구성해야 한다.
@Override
//어노테이션은 컴파일 과정에서 사라지지 않는다
protected void sorting()
{
// 지시자가 달라질 수 있지만 기존지시자보다 작아질 수 는 없다
// (protected -> public (O), protected -> private(X))
// 선택정렬(Selection Sort)
for (int i=0; i<length()-1; i++) {
for (int j=0; j<length(); j++) {
if(compare(i, j)>0) {
swap(i,j);
}
}
}
}
}
public class Test10
{
public static void main(String[] args)
{
int[] data = { 50, 42, 51, 12, 47 };
SortTest10 ob = new SortTest10();
// AbstractTest10 ob2 = new AbstractTest10();
// --하위클래스에서 추상 메소드에 대한 재정의를 마쳤다고 해서
// 추상클래스였던 상위 클래스가 일반클래스로써의 지위를 갖게 되는 것은 아니다
ob.sort(data);
ob.print();
}
}
/*======================================
* ■■■ 추상 클래스(abstract) ■■■
* 2017.01.04
========================================*/
package com.test;
//추상 클래스
abstract class AbstractTest10
{
// int 배열 변수 선언 → private화 → 정보은닉
private int[] value;
// 매개변수로 넘겨받은 int 배열로 멤버를 초기화한 후
// 정렬 구현 메소드를 호출하는 기능을 가진 메소드
public void sort(int[] value)
{
this.value = value;
sorting();
}
// 메소드 호출문으로 착각하면 안된다. 정의하다만 메소드-> 추상메소드
// 정렬을 구현하는 기능을 가진 메소드
// -- 정의하지 않고... 필요하다는 사실로 인해 선언만 해둔 상태
// -- 즉, 추상 메소드~!!!
protected abstract void sorting();
// 배열의 길이를 확인하는 기능을 가진 메소드
protected int length()
{
if (value == null)
{
return 0;
}
return value.length;
}
// 크기를 비교하는 기능을 가진 메소드
protected int compare(int i, int j)
{
if (value[i] == value[j])
{
return 0;
} else if (value[i] > value[j])
{
return 1;
} else
{
return -1;
}
}
// 자리 바꿈 기능을 가진 메소드
protected void swap(int i, int j)
{
int temp;
temp = value[i];
value[i] = value[j];
value[j] = temp;
}
// 결과 출력을 위해 만들어 놓은 출력 기능을 가진 메소드
public void print()
{
if (value == null)
{
return;
}
for (int n : value)
{
System.out.printf("%5d", n);
}
System.out.println();
}
}
// ① 추상 클래스를 상속받은 추상 클래스...
// ② 추상 클래스가 소유하고 있는 추상 메소드(sorting())를
// 재정의함으로써 일반 클래스의 형태로 변화
// abstract class SortTest10 extends AbstractTest10
class SortTest10 extends AbstractTest10
{
// 이 추상 클래스가...(SortTest10)
// 추상 클래스 라는 꼬리표를 떼기 위해서는...
// 『sorting()』 메소드를 → 추상 메소드... 를 오버라이딩(Overriding) 해서
// 완성된 형태로 기능하는 메소드로 구성해야 한다.
@Override
//어노테이션은 컴파일 과정에서 사라지지 않는다
protected void sorting()
{
// 지시자가 달라질 수 있지만 기존지시자보다 작아질 수 는 없다
// (protected -> public (O), protected -> private(X))
// 선택정렬(Selection Sort)
for (int i=0; i<length()-1; i++) {
for (int j=0; j<length(); j++) {
if(compare(i, j)>0) {
swap(i,j);
}
}
}
}
}
public class Test10
{
public static void main(String[] args)
{
int[] data = { 50, 42, 51, 12, 47 };
SortTest10 ob = new SortTest10();
// AbstractTest10 ob2 = new AbstractTest10();
// --하위클래스에서 추상 메소드에 대한 재정의를 마쳤다고 해서
// 추상클래스였던 상위 클래스가 일반클래스로써의 지위를 갖게 되는 것은 아니다
ob.sort(data);
ob.print();
}
}
인터페이스(Interface)
- 인터페이스(Interface) 개요
- 인터페이스란 완전히 미완성된 채로 남겨진 즉, 인터페이스 안에 존재하는 어떤 메소드도 몸체(body)가 존재하지 않아 실행 부분이 없다.
- 클래스를 위한 템플릿으로써의 역할을 수행하는 추상 클래스의 일종이라 볼 수 있지만... 추상화 정도가 심하다.
- 인터페이스를 구현하기 위해서는 『implements』 키워드를 사용한다.
- 하나 이상의 인터페이스를 『implements』 할 수 있다.
- 인터페이스를 『implements』한 클래스는 인터페이스 안에 있는 모든 메소드들(추상 메소드)을 Override 해야한다
- 인터페이스가 다른 인터페이스를 상속받을 수 있으며 이 때, 클래스와 마찬가지로 『extends』키워드를 사용한다.
- 클래스와는 달리 인터페이스는 다중 상속을 허용한다. (기존의 C++ 언어 등에서 지원도는 다중 상속이 많은 문제점을 지니기 때문에 자바에서는 다중 상속의 개념을 사용하지 않았지만 인터페이스라는 개념으로 변형하여 인터페이스를 통해 다중 상속을 구현하는 방법을 지원하게 된 것이다. )
- 인터페이스는 상수(상수화된 변수 포함)와 추상 메소드만 가질 수 있으며 인터페이스 안의 메소드들은 접근제어지시자를 명시하지 않아도 public 으로 설정되어 클래스에서 implements 함으로써 바로 접근이 가능하도록 지원한다.
[실습] 인터페이스(Interface)
/*=============================
■■■ 클래스 고급 ■■■
- 인터페이스(Interface)
* 2017.01.04
=============================== */
package com.test;
interface Fruit11
{
String WON = "원"; // public static final String WON = "원";
// 내부적으로 final , 인터페이스 에서 상수의 접근제어지시자 default는 public이다
int getPrice(); // public abstract
// int getPrice()
// {
// return 10;
// }
public String getName(); // abstract가 생략된 상황
}
abstract class Fruit11Impl implements Fruit11
{
//@Override // 인터페이스에서 사용할 때는 JDK1.6에서만 사용
//getPrice()
//{
//}
//getName()
}
public class Test11
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
}
}
/*=============================
■■■ 클래스 고급 ■■■
- 인터페이스(Interface)
* 2017.01.04
=============================== */
package com.test;
interface Fruit11
{
String WON = "원"; // public static final String WON = "원";
// 내부적으로 final , 인터페이스 에서 상수의 접근제어지시자 default는 public이다
int getPrice(); // public abstract
// int getPrice()
// {
// return 10;
// }
public String getName(); // abstract가 생략된 상황
}
abstract class Fruit11Impl implements Fruit11
{
//@Override // 인터페이스에서 사용할 때는 JDK1.6에서만 사용
//getPrice()
//{
//}
//getName()
}
public class Test11
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
}
}
SQL
데이터베이스 및 DBMS 개념
데이터
현실 세계에서 관찰이나 측정을 통해 수집된 사실(fact)이나 값(value)을 말한다. 정보란 데이터의 유효한 해석이나 데이터 상호간의 관계를 의사 결정에 도움이 되도록 가공한 것이다. 데이터베이스란 여러 응용시스템이 공유할 수 있도록 통합, 저장된 운영 데이터의 집합이다.
데이터베이스 관리 시스템(DBMS : DataBase Management System)
모든 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리해주고, 데이터베이스를 유지하기 위한 일련의 소프트웨어 시스템이다.
DBMS
파일 관리 시스템의 단점을 개선하여 데이터를 통합적으로 관리하는 소프트웨어로 컴퓨터에 수록한 수많은 자료들을 쉽고 빠르게 추가, 수정, 삭제, 검색할 수 있는 시스템이다. 흔히 DBMS 라고 하면 어떤 하드웨어적인 서버를 생각하는 경우가 많은데 데이터베이스 관리 시스템은 시스템이나 장비가 아닌 논리적인 소프트웨어이다.
즉, 사용자들은 응용프로그램을 이용하여 SQL 명령을 DBMS에 전달하며 DBMS는 이러한 사용자들의 명령을 받아 해석하고 이를 컴퓨터에서 처리할 수 있는 형태로 변환하여 실행하며 이와 관련된 모든 프로세서를 관리하는 논리적인 소프트웨어인 것이다.
※ SQL(Structed Query Lauguge) : 데이터를 Access 하기 위해 데이터베이스와 통신하는 언어
오라클 접속 및 구동
명령 프롬프트 상태에서 SQL 접속하기
# 접속된 사용자 없이 단순히 SQL 모드로 전환하겠다.
C:\Users\sohee>sqlplus/nolog
# 결과값:
SQL*Plus: Release 11.2.0.2.0 Production on 목 1월 4 16:51:36 2018
Copyright (c) 1982, 2014, Oracle. All rights reserved.
현재 접속된 오라클 서버 사용자 계정 확인
# 현재 접속된 오라클 서버 사용자 계정 확인
SQL> show user
# 결과값:
USER is ""
첫 번째 관리자 계정에 해당하는 『sys』계정으로 연결을 시도한다.
# 첫 번째 관리자 계정에 해당하는 『sys』계정으로 연결을 시도한다.
SQL> connect sys/nds0102$ as sysdba
# 결과값:
Connected.
다시 접속한 사용자 계정 조회
# 다시 접속한 사용자 계정 조회
SQL> show user
# 결과값:
USER is "SYS"
'교육 및 세미나 > 신입사원 교육' 카테고리의 다른 글
6일차(2018.01.10) (0) | 2018.01.12 |
---|---|
5일차(2018.01.09) (0) | 2018.01.12 |
4일차(2018.01.05) (0) | 2018.01.12 |
2일차(2018.01.03) (0) | 2018.01.09 |
1일차(2018.01.02) (0) | 2018.01.09 |