다형성(Polymorphism)
여러 가지 형태를 가질 수 있는 성질을 의미
한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로 써 다형성을 프로그램적으로 구현해 놓은 특징이 바로 다형성이다.
1) 오버로딩(Overloading)
- 메소드 오버로딩
- 생성자 오버로딩
메소드 이름을 동일하게 여러 개 구성할 수 있다. 단, 메소드 이름은 동일하되, 매개변수는 다르게 구성해야 한다.
매개변수의 개수가 다른거나 자료형이 다르거나 순서가 다르게 구성해야 함
반환타입은 같아도 되고 달라도 됨
//다형성 - Overload
package day12;
public class Cafe {
public static void main(String[] args) {
CoffeeMachine cm = new CoffeeMachine();
//1.밀크 커피
cm.makeTea(3, 3, 3);
//2.설탕 커피
cm.makeTea(3, 3);
//3.블랙 커피
cm.makeTea(3);
System.out.println(cm.makeTea(3));
//4.크림 커피
cm.makeTea(3, (short)3);
Yuja yj = new Yuja();
yj.setSugar(3);
yj.setYuja(2);
cm.makeTea(yj);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package day12;
//다형성 - Overload
public class CoffeeMachine {
int coffee;
int sugar;
int cream;
public void makeTea(int c, int s, int cr) {
coffee = c;
sugar = s;
cream = cr;
System.out.println("밀크 커피: "+(coffee+sugar+cream));
}
public void makeTea(int c, int s) {
coffee = c;
sugar = s;
System.out.println("설탕 커피: "+(coffee+sugar));
}
public String makeTea(int c) {
coffee = c;
return "블랙 커피: "+coffee;
}
public void makeTea(int c, short cr) {
coffee = c;
cream = cr;
System.out.println("크림 커피 : "+(coffee+cream));
}
//유자차 만드는 메소드
public void makeTea(Yuja yj) {
System.out.println("유자차 : " +(yj.getSugar()+yj.getYuja()));
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package day12;
public class Yuja {
private int yuja;
private int sugar;
public void setYuja(int yuja) {
this.yuja = yuja;
}
public int getYuja() {
return yuja;
}
public void setSugar(int sugar) {
this.sugar = sugar;
}
public int getSugar() {
return sugar;
}
}
print같은 경우도 다양한 자료 형식을 출력 가능하게 오버로딩을 했다.
매개변수(argument, parameter) ==> 지역변수
멤버변수(field, property) ==> 인스턴스 변수, 클래스 변수(static 변수)
지역변수와 멤버변수의 이름이 동일할 경우 지역변수에게 우선권이 있다.
따라서 인스턴스 변수와 지역변수를 구별하기 위해 인스턴스 변수 앞에 this를 붙인다.
ex) this.sugar = sugar;
this는 자기자신의 인스턴스를 참조하는 키워드
생성자(Constructor)
객체를 생성할 때 호출하는 메소드의 일종
역할 : 멤버변수(인스턴스 변수)들의 초기화
생성자 구성시 유의사항
1) 생성자 이름은 클래스 이름가 동일하게 구성한다.
2) 반환타입을 갖지 않으므로 명시하지 않는다.
기본생성자 : 매개변수를 받지않는 생성자
생성자를 구성하지 않으면 컴파일러가 기본생성자(default생성자)를 제공한다.
컴파일러가 제공하던 기본생성자는 프로그래머가 생성자를 구성하면 사라진다.
package day12;
public class Student {
int no;
String name;
String cname;
public Student() {
no = 100;
name = "김아무개";
cname = "JAVA";
}
public Student(String name) {
this.name = name;
}
public Student(String name, int no) {
this.name = name;
this.no = no;
}
public Student(String name, String cname, int no) {
this.name = name;
this.cname = cname;
this.no = no;
}
public void showInfo() {
System.out.println("학생정보");
System.out.println("학번 : "+no);
System.out.println("이름 : "+name);
System.out.println("학급 : "+cname);
}
}
생성자 안에서 this()
this()는 자기 자신의 생성자를 호출하는 메소드
한 클래스 안에 여러 개의 생성자가 오버로딩된 형태로 존재하고, 그 기능이 유사할 때, this라는 키워드를 이용해서 자기 자신의 다른 생성자를 호출할 수 있다.
주의.
this()는 생성자 안에서만 호출해야한다.
this()를 호출할 때는 반드시 생성자의 첫 번째 문장이어야한다.
또한 생성자 안에서 this()와 super()를 함께 쓸 수 없다.
package day12;
public class Superman {
String name;
int height;
int power;
public Superman() {
}
public Superman(String name, int height, int power) {
this.name = name;
this.height = height;
this.power = power;
}
public Superman(int p, int h, String name) {
this(name,h,p);
}
public Superman(String name, int h) {
this(name,h,0);
}
public String showInfo() {
String str="슈퍼맨 정보\n";
str+="이름 : "+name+"\n";
str+="키 : "+height+"\n";
str+="초능력 : "+power+"\n";
return str;
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SQL
cmd 창에서 sqlplus 치면 system 과 sys가 있다.
설치하면서 설정한 password를 입력하고 접속하면 database 서버와 연결되는 것이다.
select count(*) from tab;
테이블 수를 보여준다.
quit
끝내기
oracle database를 다운 받으면 자동으로 database서버가 실행된다.
stop database 아이콘을 실행하면 database서버가 중지된다.
start database를 누르면 database서버가 실행된다.
sys가 최고 관리자이다.
컴퓨터가 실행되면 windows 관리 - 서비스 - OracleService를 확인할 수 있다. 실행과 중지도 관리할 수 있다.
Lister과 같이 실행해주어야지 작업을 진행할 수 있다.
sqlplus 접속
system
Abcd1234
#scott계정 만들기
create user scott
identified by 비밀번호; ==> user를 만든다고 바로 사용할 수 있는 것이 아니고 권한도 주어야지 사용 가능하다.
grant create session to scott; (세션 생성권한을 scott에게 부여)하면 scott으로 로그인 가능해짐
하지만 세션 생성 권한만으로 데이터를 관리하지는 못함 따라서 아래와 같이 (권한의 집합)을 부여하자
grant connect, resource to scott;
#scott계정 삭제
drop user scott cascade;
student table 생성
SQL> create table student(
2 no number(4),
3 name varchar2(20),
4 cname varchar2(50)
5 );
#테이블 구조 확인
desc student;
SQL> desc student;
Name Null? Type
----------------------------------------- -------- ----------------------------
NO NUMBER(4)
NAME VARCHAR2(20)
CNAME VARCHAR2(50)
#학생 데이터 조회
select name from student;
#학생 데이터 선택 조회
SQL> select * from student
2 where cname='수학';
#학생 데이터 삽입(insert)
insert into student(컬럼명1, 컬러명2, ....)
values (컬럽값1, 컬럼값2 ........)
SQL> insert into student(no,name,cname)
2 values(1,'백동길','한문'); ==>작은 따옴표를 사용한다. ==> ed를 누르면 메모리 버퍼에서 실행된 것이기 때문에 수정가능하다.
commit;
insert 할때 컬럼명을 등록하지 않으면 차례대로 입력해주면 insert가 가능하다.
등록(commit)하기전에 동길이한테 전화와서 취소하면 rollback; 을 할 수 있다.
이후에 sqldevoloper을 다운받고 연결한다면 다음과 같은 작업을 진행 할 수 있다.
'개발자 > 국비지원 SW' 카테고리의 다른 글
국비지원 14일차 - @Override, instanceof, GUI실습2, Layout, Foreign Key (0) | 2020.04.29 |
---|---|
국비지원 13일차 - 상속, 오버라이딩, super, 다형성, GUI(awt), SQL문(DDL, DML, DQL) (2) | 2020.04.28 |
국비지원 11일차 - 캡슐화, UML, 명렬줄 인수, 시맨틱 태그 (0) | 2020.04.24 |
국비지원 10일차 - 참조유형의 배열, for each문, OOP, 추상화 (0) | 2020.04.23 |
국비지원 9일차 - eclipse 설치 및 사용, 배열, border style, 하이퍼링크 스타이, button (0) | 2020.04.22 |