o getter와 setter함수
/*
● 함수명 작성 규칙
- is함수명() 대부분 boolean으로 반환
- to함수명() to뒤의 값을 반환
- get함수명() 대부분 리턴값 존재(값 가져오기) -> 대개 매개변수 1개
- set함수명() 원하는 값으로 세팅할 때(값 세팅하기) -> 대개 매개변수 2개
*/
//getter함수명을 작성하는 규칙(하기를 추천)
//->get멤버변수의첫글자대문자바꾼후함수명()
//setter함수명을 작성하는 규칙
//->set멤버변수의첫글자대문자바꾼후함수명()
//BbsDTO클래스 생성후 실습
-------------------------------------------------
class BbsDTO {//Data Transfer Object ->getter, setter가 있는 함수
//멤버변수 field
private int bbsno; //글번호
private String writer; //글작성자
private String subject; //글제목
//생성자함수 constructor
public BbsDTO() {}
//멤버함수 method
//멤버함수를 통해 private로 선언해 놓은 멤버변수에 접근해 간접적으로 사용
//getter함수명을 작성하는 규칙(하기를 추천)
//->get멤버변수의첫글자대문자바꾼후함수명()
public int getBbsno() {
return this.bbsno;
}
public void setBbsno(int bbsno) {
this.bbsno = bbsno;
}
public String getWrite() {
return this.writer;
}
public void setWrite(String writer) {
this.writer = writer;
}
public String getSubject() {
return this.subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
}//class end
-----------------------------------
BbsDTO dto = new BbsDTO();
dto.setBbsno(1);
dto.setWrite("오필승");
dto.setSubject("무궁화 꽃이 피었습니다");
System.out.println(dto.getBbsno());
System.out.println(dto.getWrite());
System.out.println(dto.getSubject());
=====================================
o Object
--------------------------------------------------
import java.lang.*;//생략가능
class Jeju extends Object{
@Override
public String toString() {
return "제주도";
}
}//class end
class Suwon extends Object{
private String id = "itwill";
private String pw = "1234";
@Override//내가 원하는 자료값이 들어갔는지 String 출력으로 확인
public String toString() {
return "Suwon [id = " + id + ", pw = " + pw + "]";
}
}//class end
class Incheon extends Object{
private String name = "인천 광역시";
private String phone = "789-8745";
@Override//마찬가지로 값 확인 위해 String으로 출력하여 확인(메뉴의 source에서 자동입력 가능)
public String toString() {
return "Incheon [name=" + name + ", phone=" + phone + "]";
}
}// Incheon class end
class Seoul{}//Seoul class end
-----------------------------------------------------------
public class Test02_Object extends Object{//extends Object는 생략가능
public static void main(String[] args) {
// Object 클래스
/*
- 모든 자바 클래스의 최고 조상 클래스
- 자바의 기본 패키지 (java.lang)에 선언되어 있음
- 자바의 모든 클래스는 무조건 Object클래스를 상속받는다.
- 자바의 모든 클래스는 Object클래스의 후손들이다 -> true
*/
Jeju je = new Jeju();
System.out.println(je.toString());
Suwon su = new Suwon();
System.out.println(su.toString());
Incheon in = new Incheon();
System.out.println(in.toString());
//함수이름 toSting()생략가능
System.out.println(je);
System.out.println(su);
System.out.println(in);
Seoul se = new Seoul();
System.out.println(se);
//Seoul의 내용물이 없을 때 메모리 할당이 잘 됐는지 확인할 수 있는 코드만 출력됨
//oop0320.Seoul@379619aa
se = null;//메모리 할당 안했을 시 출력되는 것 확인용
System.out.println(se);
}//main end
}//class end
=======================================
public static void main(String[] args) {
o 연습문제
//문1)주민번호의 각 숫자 합 구하시오(Character클래스와 charAt()함수 이용)
//8+9+1+2+3+4+5+6+7
String jumin = "8912301234567";
int sum1 = 0;
for(int i = 0; i <jumin.length(); i++) {
char ch = jumin.charAt(i); //'8'->8
sum1 = sum1 + Character.getNumericValue(ch);
}
System.out.println(sum1);//51
//내가한것 성공
int sum = 0;
for(int a = 0 ; a < jumin.length() ; a++) {
char n = jumin.charAt(a);
int num = Character.getNumericValue(n);
sum = sum + num;
}//
System.out.println(sum);//51
/////////////////////////////////////////////////////////
//문2)대소문자를 서로 바꿔 출력 (Character클래스와 charAt()함수 사용)
// gONE wITH tHE wIND
String str = "Gone With The Wind";
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(Character.isUpperCase(ch)) {//만약 (ch가 대문자니?)가 true라면
System.out.print(Character.toLowerCase(ch));
}else if(Character.isLowerCase(ch)) {//만약 (ch가 소문자니?)가 true라면
System.out.print(Character.toUpperCase(ch));
}else {//위의 조건 외의 경우
System.out.print(ch);
}//if end
}//for end
//내가한것 시간부족
/*
char m = ' ';
for( int a = 0; a < str.length(); a++) {
char n = str.charAt(a);
Character ch = n;
if ( n < 'a' ) {
Character.toLowerCase(n);
}else {Character.toUpperCase(n);}//if end
m = m + n;
*/
}//main() end
===================================
o super
// super 부모, 조상
// superclasses 부모클래스들
// subclasses 자식클래스들
//super : 자식클래스에서 부모클래스의 멤버에 접근할 때
//super() : 자식클래스의 생성자 함수가 부모클래스 생성자 함수를 접근할때
//this : 멤버변수(field)와 일반 지역변수 구분
//this() : 자신의 생성자함수가 자신의 생성자함수를 호출할 때
//School 클래스 생성 후 실습
----------------------------------
class School extends Object {
String name = "학교";
public School() {
System.out.println("School()...");
}
}//class end
class MiddleSchool extends School{//name변수와 부모의 생성자 함수 상속받은 상태
public MiddleSchool() {
//상속관계에서 부모생성자함수 호출 명령어(omit, 생략가능)
super();
System.out.println("MiddleSchool()...");
}
public void disp() {
System.out.println(name);//"학교", 부모가 물려준 값 그대로 출력
}//MiddleSchool() end
}//class end
class HighSchool extends School{
String name = "고등학교";
public HighSchool() {
super();
System.out.println("HighScholl()...");
}
public void disp() {
String name = "강남 고등학교";
System.out.println(name);//지역변수 "강남고등학교"
System.out.println(this.name);//나의 멤버변수 "고등학교"
System.out.println(super.name);//상속받은 name "학교"
}
}//class end
----------------------------
public static void main(String[] args) {
//부모생성자 함수가 먼저 호출 -> 이후 자신의 함수 호출됨
MiddleSchool ms = new MiddleSchool();
//"School()..."출력 <- School() 상속했기 때문에
//"MiddleSchool()..."출력 <-MiddleSchool()의 생성자함수의 내용
ms.disp();//"학교"->상속받은 name출력
//부모인 School() -> 자식인 HighSchool();
HighSchool hs = new HighSchool();
hs.disp();
//"강남 고등학교" -> disp()메서드의 지역변수 name
//"고등학교" -> HighSchool클래스 내의 멤버변수인 name
//"학교" -> 부모인 School클래스에서 상속받은 name
}//main() end
================================
o super
// super, super()와 this, this() 활용한 클래스 설계
//Parent 클래스 생성 후 실습합니다.
----------------------------------------------------------------
class Parent extends Object{
int one, two;
public Parent() {}
public Parent(int one, int two) {
this.one = one;
this.two = two;
}
}//class end
class Child extends Parent {
int three;
public Child() {
super();//부모로부터 상속받은 함수, 생략가능
}
public Child(int a, int b, int c) {
//one, two 두 멤버변수가 private속성이면 에러
//상속받은 변수는 상속받은 함수와 달리 super 생략하면 안 됨
//super.one = a; 부모클래스가 private로 선언되면 접근불가
//super.two = b;부모클래스가 private로 선언되면 접근불가
super(a, b);//위와 동일하게 출력
this.three = c;
}
}//class end
-----------------------------------------------------------
public static void main(String[] args) {
Child child = new Child(10, 20, 30);
System.out.println(child.three);//30
System.out.println(child.one);//10
System.out.println(child.two);//20
}//main()
=======================================
o // 문제) 주민번호 유효성 검사
//Jumin class 생성해 실습
---------------------------------------------------
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Jumin {
private String juminno;//주민번호
public Jumin() {}
public Jumin(String juminno) {
this.juminno = juminno;
}//end
public boolean validate() {
boolean flag = false;
int sum = 0;
for(int a = 0; a < juminno.length()-1; a++) {
char ch = juminno.charAt(a);//a번째문자열을 문자형으로 변환
int num = Character.getNumericValue(ch);
if (a <= 7) {
sum = sum + num * ( a + 2 );
}else{
sum = sum + num * ( a - 6 );
}
}
int cal = (11 - ( sum % 11 ));
if((char)(cal+'0') == juminno.charAt(12)) {
flag = true;
}
//문) 주민번호가 맞으면 flag변수값을 true 대입
return flag;
}//validate() end
public void disp() {
//문) 생년월일, 성별, 나이, 띠 출력
/*
생년월일 : 1989년 12월 30일
성별 : 남자
나이 : 만 34세 -> 올해년도(그레고리안캘린더클래스 이용)
띠 : 태어난 해%12 (0원숭이, 1닭, 2개 ~~11양)
*/
int gender = Integer.parseInt(juminno.substring(6, 7));
//생년월일출력
int byear = 0;
String styear = juminno.substring(0,2);//문자열에서 출생년도 자르기
int year = Integer.parseInt(styear);//출생년도
if(gender > 2) {
byear = year + 2000;
}else {
byear = year + 1900;
}
System.out.print("생년월일 : " + byear + "년 ");//출생년도출력
String stmonth = juminno.substring(2,4);//문자열에서 출생월 자르기
System.out.print(stmonth + "월 ");//월출력
String stdate = juminno.substring(4,6);//문자열에서 출생일 자르기
System.out.println(stdate + "일");//일출력
//성별출력
//젠더변수는 위에
if( gender % 2 == 0) {
System.out.println("성별 : 여자");
}else {
System.out.println("성별 : 남자");
}
//나이출력
GregorianCalendar now = new GregorianCalendar();
int age = now.get(Calendar.YEAR) - byear;
System.out.println("나이 : 만 " + age + "세");
//갑자출력
String gap = "";
switch (byear%12) {
case(0) : gap = "원숭이"; break;
case(1) : gap = "닭"; break;
case(2) : gap = "개"; break;
case(3) : gap = "돼지"; break;
case(4) : gap = "쥐"; break;
case(5) : gap = "소"; break;
case(6) : gap = "호랑이"; break;
case(7) : gap = "토끼"; break;
case(8) : gap = "용"; break;
case(9) : gap = "뱀"; break;
case(10) : gap = "말"; break;
case(11) : gap = "양"; break;
}
System.out.println("띠 : " + gap);
}//disp() end
----------------------------------------------------------
public static void main(String[] args) {
Jumin id = new Jumin("8912301234567");
if(id.validate()) {
System.out.println("주민번호 맞다");
id.disp();
}else {
System.out.println("주민번호 틀리다");
}//if end
}//main()end
============================
o 다형성
//다형 Polymorphism
//Father클래스 생성 후 실습
------------------------------------
public class Father {
//멤버변수 field
public String name = "아버지";
public String addr = "주소";
//생성자함수 constructor
public Father() {}
public Father(String name, String addr) {
this.name = name;
this.addr = addr;
}//end
//멤버함수 method
public void disp() {
System.out.println(this.name);
System.out.println(this.addr);
}//disp() end
}//class end
class Son extends Father {
public Son() {}
public Son(String n, String a) {
super.name = n;
super.addr = a;
}//end
}//class end
class Daughter extends Father {
String friend = "절친";
public Daughter() {}
public Daughter(String n, String a) {
super(n, a);//부모생성자함수호출
}//end
}//class end
----------------------------------------------
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test07_poly {
public static void main(String[] args) {
//객체생성
//GregorianCalendar now = new GregorianCalendar();
//Integer inte = new Integer(3);
//다형성의 예 -> 부모클래스를 자료형으로 해서 자식클래스 생성가능
//Calendar now = new GregorianCalendar();
//Number inte = new Integer(3);
//1) 일반적 방식으로 객체 생성
//-> new연산자 사용
//-> POJO(Plain Old Java Object)방식
/*
Father fa = new Father();
fa.disp();
Son son = new Son("손흥민", "영국");
son.disp();
Daughter dau = new Daughter("김연아", "한국");
dau.disp();
*/
/////////////////////
//2) 다형성을 이용한 객체 생성
//->자식클래스가 부모클래스에 대입 가능하다
//->부모클래스는 대입된 자식클래스의 모양으로 스스로를 변환한다
Father fa = new Son("개나리", "역삼동");
fa.disp();
fa = new Daughter("진달래", "서초동");
fa.disp();
System.out.println(fa.name);
System.out.println(fa.addr);
//에러, 자식클래스에서 추가된 멤버는 다형성의 대상이 아니다
//System.out.println(fa.friend);
/////////////////////////////////////////
//부모클래스도 자식클래스에 대입가능
//단, 자식클래스의 모양으로 형변환해야
Father father = new Father();
Son son = new Son();
//강제형변환과 방법 같음
//son = (Son)father;
//Exception이 발생할 수도 있음
double a = 3.4;
int b = (int)a;//강제형변환
////////////////////////////////
//예)
//다형성 자식클래스가 부모클래스에 대입
Object obj = new Integer(3);
System.out.println(obj.toString());
//다형성 부모클래스가 자식클래스에 대입가능
//다만 자식클래스로 형변환해야
Integer inte = (Integer)obj;
obj = new Father();
System.out.println(obj.toString());
//참고: 리턴형이 Object인 경우
//다소 맥락을 고려해야하긴 하나 모든 형태의 자료 반환 가능
//왜? 모든 클래스는 Object의 자식클래스이기 때문에 다형성에 의해 가능
}//main() end