본문 바로가기
수업노트

23.3.20

by MIniLabo 2023. 3. 20.

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

'수업노트' 카테고리의 다른 글

23.3.22  (0) 2023.03.22
23.3.21  (0) 2023.03.21
23.3.17  (0) 2023.03.17
23.03.16  (0) 2023.03.16
23.3.15  (0) 2023.03.15