250x250
Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 웹개발자 (싱글톤, 캡슐화, 상속화, 오버라이딩, 다형성 까지) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 웹개발자 (싱글톤, 캡슐화, 상속화, 오버라이딩, 다형성 까지)

개린이9999 2022. 11. 28. 09:23
728x90

참조

Call by Value: 내용에 의한 참조

Call by Reference: 객체에 의한 참조


싱글톤(Singleton) 패턴의 정의는 단순하다. 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 


final 상수선언시 변수 이름은 대문자


static 


11. 다음과 같이 정의된 클래스를 작성하고, 객체를 생성해 메서드를 호출

클래스명 MATH

메서드명: max

메서드명:min


Score 클래스를 생성 

math , kor, eng 정수형 클래스 변수 

 

합계 구하는 메서드 (반환타입:int)

평균구하는 메서드 (반환타입:double)

public int sum() {
return this.math+this.kor+this.eng;
}

class에 이식을 기본적으로 기억하자.


package statictest;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

Student stu1= new Student(100,80,90);
Student stu2= new Student();

int stu1_sum, stu2_sum;
double stu1_avg, stu2_avg;

System.out.println("정수 3개입력:");
int math=sc.nextInt();
int kor=sc.nextInt();
int eng=sc.nextInt();

stu1_sum=stu1.sum();
stu2_sum=stu2.sum(math,kor,eng);

stu1_avg = stu1.avg();
stu2_avg = stu1.avg(math,kor,eng);

System.out.println("학생1의합계"+ stu1_sum+"평균:"+stu1_avg);
System.out.println("학생2의합계"+ stu2_sum+"평균:"+stu2_avg);

}
}

 


package statictest;

public class Student {

int math,kor,eng;
double stu1_avg, stu2_avg;

Student(){
}

public Student(int math, int kor, int eng) {
this.math = math;
this.kor = kor;
this.eng = eng;
}

public int sum() {
return this.math+this.kor+this.eng;
}

public int sum(int math,int kor,int eng) {
return math+kor+eng;
}

public double avg() {
return(math+kor+eng)/3.0;
}
public double avg(int math,int kor,int eng) {
return (math+kor+eng)/3.0;
}
}

 


이름이 동일한 메서드를 여러개 못만들지만 , 매개변수가 다른것은 만들수있다. 

훨씬 더 간편하게 만들기

// 학생 3명중 합계까 가장 큰 값, 가장 작은 값 출력 하기


package statictest;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Student[] students = new Student[3]; //배열방을 만듦, 객체가아님
int i;
int max=0;
int min=100001;
int maxIdx=0,minIdx=0;

for(i=0; i<students.length;i++) {
students[i] = new Student();

System.out.println(i+1+"번째 학생");
students[i].setScore();

students[i].sum();
students[i].avg();
}
for(i=0; i<students.length;i++) {
System.out.println(i+1+"번쨰 학생");
students[i].ShowResult();
}

for(i=0; i<students.length;i++) {
if (students[i].sum>max) {
max=students[i].sum;
maxIdx=i+1;
}
if (students[i].sum<min) {
min=students[i].sum;
minIdx=i+1;
}
}
System.out.println("최대값: "+max+"최소값: "+min);
System.out.println(maxIdx+ "번쨰 학생이 1등");
System.out.println(minIdx+ "번쨰 학생이 1등");
}
}

 


캡슐화


상속화 개념

부모 클래스

자식 클래스

 

ex) 게임 캐릭터 생성

 

직업(부모클래스)  - hp,mp,attack 를 만듦

 

 

기사-hp,mp,attack가 아니라 -> 직업(부모클래스) 물려받아라(추가 되는 개념)-> 기사만의 특징+직업(부모클래스)

마법사-hp,mp,attack가 아니라 -> 직업(부모클래스) 물려받아라-> 마법사만의특장+직업(부모클래스)

 

Class job {

 

}

Class Skill {

 

}

 

Class Knight extends job,Skill (x) {

 

}

 

Class Mage extends job {

무조건 상속받은 부모클래스 객체가 먼저 생성, 그다음에 상속받을 클래스가 생성 

}

 

 


Super (부모를 가르침)211p.

 

this(this는 자기 자신을 가르침)


메서드 재정의 215p

==

오버라이딩

실행되는 내용만 바꾸고자 할 때,

오버라이딩의 조건

자바에서 메소드를 오버라이딩하기 위한 조건은 다음과 같습니다.

 

1. 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 합니다.

    하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있습니다.

2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없습니다

3. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없습니다.

 

부모객체

void go() { 

print("전진")

}

자식 객체 ( 부모 상속 )

-> 이거 쓰기 싫을 때

 

void go() {

print("자식 asdasdasdasd")

}

이렇게 바꾸는 것을 오버라이딩 

예제

class Parent {

    void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }

}

class Child extends Parent {

    void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }

}

 

public class Inheritance05 {

    public static void main(String[] args) {

        Parent pa = new Parent();

        pa.display();

        Child ch = new Child();

        ch.display();

        Parent pc = new Child();

        pc.display(); // Child cp = new Parent();

    }

오버라이딩 예시

이렇게 하면 전진 이라고 표시

 


다형성(다양한 형태)

다형성-> 형변화int->double

다형성 (Polymorphism)

여러가지 형태를 가질 수 있는 능력,  조상 타입 참조변수로 자손 타입 객체를 다루는 것 

객체와 참조변수의 타입이 일치할  때와 일치하지 않을때의 차이

SmartTv s= new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치

TV          t= new SmartTv(); //  조상 타입 참조변수로 자손 타입 인스턴스 참조

 

- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다. 

TV t=       new SmartTV(): // 허용

(조상)5개       <    자손7개 허용(o)

SmartTv s= new Tv(); //에러, 허용안됨

(자손) 7개       <     (조상)5개 (x)

 

 

 

 

 

728x90