--------------------------this 보완
-- 내 코드
------ this에 대한 실습코드
public class ThisCall {
//field
private int i,j;
//constructor
//오버로딩
public ThisCall() {
}
public ThisCall(int i) {
this.i = i;
}
public ThisCall(int i, int j) {
this.i = i;
this.j = j;
}
//method
public int getA()
{
return i;
}
public int getB()
{
return j;
}
public static void main(String[] args) {
ThisCall tc1 = new ThisCall();
ThisCall tc2 = new ThisCall(1);
ThisCall tc3 = new ThisCall(2, 5);
System.out.println(tc1.getA() + "\t" + tc1.getB());// 0,0
System.out.println(tc2.getA() + "\t" + tc2.getB());// 1,0
System.out.println(tc3.getA() + "\t" + tc3.getB());// 2,5
}
}
-- 강사님 코드
public class ThisCall {
private int a;
private int b;
// ab를 초기화하는게 공통
public ThisCall() {
// a=b=0;
this(0,0); // 생성자에서 생성자 호출
}
public ThisCall(int a) {
// this.a = a;
// b=0;
this(a,0); // 관리가 쉬워짐, 유지보수
}
public ThisCall(int a, int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public void setA(int a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
public static void main(String[] args) {
ThisCall tc1 = new ThisCall();
ThisCall tc2 = new ThisCall(1);
ThisCall tc3 = new ThisCall(2, 5);
System.out.println(tc1.getA() + "\t" + tc1.getB());// 0,0
System.out.println(tc2.getA() + "\t" + tc2.getB());// 1,0
System.out.println(tc3.getA() + "\t" + tc3.getB());// 2,5
}
}
--- 정리
public class ThisExam01 {
private int a;
// setter
public void setA(int a) { // (ThisExam this, int aa)
this.a = a; // 필드 a인지 명확하게 구분지으려고 this를 썼음.
// this를 쓰지 않으면 우선순위가 매개변수임.
}
// getter
public int getA() { // getA(ThisExam this)
return this.a;
}
public ThisExam01 getObject() {
return this; // 자기자신의 객체를 리턴할때
}
public static void main(String[] args) {
ThisExam01 te = new ThisExam01(); // 생성자 호출
te.setA(10); // te.setA(te, 10)
System.out.println(te.getA());
}
}
/*
* this, this()
* - 인스턴스 메소드에 첫번째 매개변수
* - 자기 자신을 접근하는 레퍼런스
*
* this
* : instance method의 첫번째 매개변수로 항상 존재
* : 만들수는 없고 사용만 가능
*
* this
* 1. 매개변수 이름과 필드 이름이 같을 경우
* 2. 인스턴스 메소드에서 자기자신의 객체를 리턴할떄
*
* this() 자기 자신을 호출
* : 생성자 호출됨.
* : 생성자에서 또다른 생성자를 호출(내 자신의 생성자)
* : 이유 : 유지보수 관리가 쉬워짐
*/
-- 스태틱에서 인스턴스 강제접근
// 스태틱에서 인스턴스 변수에 접근하는 방법.
public class ThisExam02 {
private int a;
// 스태틱에서 굳이 인스턴스를 쓰고 싶으면 this 역할을 직접 구현해야함.
public static void disp(ThisExam02 te) {
System.out.println(te.a);
// 스태틱 필드에서 인스턴스 접근 불가
}
public static void main(String[] args) {
ThisExam02 te = new ThisExam02();//메모리를 만들었는데에도 못쓴다...왜? this로 객체를 구분해서 해야하는데 없기때문
te.disp(te);
//ThisExam02.disp();
}
}
-------------------------- 클래스 관계 (5일차 진도)
class A{ // data class
String n;
public String getN() {
return n;
}
public void setN(String n) {
this.n = n;
}
}
class B{ // data class
int n;
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
}
public class CallCon {
// has ~ A 관계
private A name; // A타입을 가져다 쓰면서 이름
private B age; // B타입을 가져다 쓰면서 나이
public CallCon() {
// 생성자에 객체를 생성과 동시에 필드의 클래스 변수를 초기화 해줘야함.
name = new A();
age = new B();
// 실제 객체를 누가 쓰느냐
}
public void setName(String n) {
this.name.setN(n);
}
public String getName() {
return this.name.getN();
}
public void setAge(int n) {
this.age.setN(n);
}
public int getAge() {
return this.age.getN();
}
public static void main(String[] args) {
// 사용자
CallCon cc = new CallCon();
cc.setName("super");
cc.setAge(1000);
System.out.println(cc.getName());
System.out.println(cc.getAge());
}
}
/* 5일차
*
* 클래스관계
* has ~ a ( ~가 ~를 가지고 있다.) // 리모콘
* : 객체가 필요에 의해서 객체를 가져다 쓰는 괸계
*
* 독립된 객체 : 데이터 클래스
* - 자기 자신만을 만듦 누군가 가쓴다면 쓸 수 있는 환경을 만들기 (main과 같음)
* 데이터클래스를 갖다 쓰는 클래스 : 데이터관리클래스
*
* is ~ a ( ~는 ~이다.)
*
*
*/
---------------------- 실습 : 한사람 성적처리(과목수 입력)
// 이름 입력받는 데이터 클래스
package Day5;
public class NameStudent {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// 과목 입력받는 데이터 클래스
package Day5;
public class Subject {
private int []score; // 입력받을 과목 필드 선언
private float avg;
private int tot;
// private int tot;
// private float avg;
// 과목은 사용자가 가져다 쓸거임
public Subject() {
}
// 과목 수 선언
public Subject(int a) {
this.tot = 0;
this.score = new int[a];
}
// 과목 연산
public void setScore(int i, int score) {
this.score[i] = score;
}
public int[] getScore() {
return this.score;
}
// 총점 (마지막 배열)
// public void seTotal(int score) {
// // 출력할때 getScore에서 마지막 인덱스를 쓰기 위함임.
// this.score[getScore().length-1] += score;
// }
public int getTotal() { //총점
for(int i=0;i<score.length;i++) {
tot += score[i];
}
return tot;
}
// 총점
// public int getTotal() {
// return kor+eng+mat;
// }
// 평균
public float getAvg() {
return (float)tot/getScore().length;
}
}
// 메인부분
package Day5;
import java.util.Scanner;
public class StudentScoreMag {
// 연산 담당
private NameStudent name; // name 타입을 쓴다. 대기상태
private Subject sub;
// 생성자 초기화 및 객체 생성
// 오버로딩
public StudentScoreMag() {
name = new NameStudent(); // 객체 생성.. name안의 get, set사용
}
public StudentScoreMag(int a) {
sub = new Subject(a);
}
// Method
public void setName(String n) {
this.name.setName(n);
}
public String getName() {
return this.name.getName();
}
// main
public static void main(String[] args) {
char str;
Scanner sc = new Scanner(System.in);
StudentScoreMag ssm = new StudentScoreMag();
do {
// 이름
System.out.print("학생 이름 : ");
ssm.setName(sc.next());
// 과목 수 입력
System.out.print("과목 수 입력 : ");
StudentScoreMag ssm1 = new StudentScoreMag(sc.nextInt());
for(int i=0;i<ssm1.sub.getScore().length;i++) {
System.out.printf("%d번 과목점수 입력 : ",i+1);
ssm1.sub.setScore(i, sc.nextInt());
}
// 출력
System.out.println("이름 : " + ssm.getName());
for(int i=0;i<ssm1.sub.getScore().length;i++) {
System.out.println((i+1)+"번 과목 점수 : " +ssm1.sub.getScore()[i]);
}
System.out.println("총점수 : "+ssm1.sub.getTotal());
System.out.println("평균 : "+ssm1.sub.getAvg());
System.out.println();
System.out.print("Continue?(y/n) : ");
str = sc.next().charAt(0);
if(str == 'n' || str == 'N') {
System.out.println("End");
break;
}
}while(str == 'y' || str == 'Y');
}
}
반응형
'자바과정 > 스터디' 카테고리의 다른 글
파이썬 기초 다지기 (2) | 2021.02.27 |
---|---|
Java 기초 - 6일차 (0) | 2021.02.04 |
스터디 2일차(실습 코드 보완) (0) | 2021.02.02 |
스터디 2일차 (0) | 2021.02.02 |
스터디 1일차 (0) | 2021.02.02 |
댓글