본문 바로가기

카테고리 없음

[자바복습] 참조타입과 클래스 - 미완성

[5장 - 참조타입]

-------------------------------------------------------

배열 : 연속적인 집합체

int[] n = new int[3]; 

//배열을 참조하기 위한 변수 왼쪽이 더 직관적 >= int n[]

//기본 자료형을 제외한 모든 자료형은 참조타입

//배열을 참조하기 위한 변수 왼쪽이 더 직관적 >= int n[]

//기본 자료형을 제외한 모든 자료형은 참조타입

//heap(메모리) : 차곡차곡 저장X 메모리의 단편화(구멍 송송) -> 이걸방지하기 위해

//최대한 데이터를 떨어뜨려놓음(이 알고리즘 : hashing) 

//메모리를 저장하고 꺼내오는 방법 2가지 : index값만 모아놓은 걸 따로만듦

//+손 필기 참조


//저장방법1: int[] n = new int[] {10,20,30};

//저장방법2: int[] n =  {10,20,30};

int[] n = new int[3];

n[0] = 10; // 0번째에 저장

n[1] = 20;

n[2] = 30;


//배열 범위 조심!! i <= 3 실수 조심

//3 -> n.length로 이용

for (int i = 0; i < 3; i++) {

System.out.println(n[i]); // index 0

}

//예제--------------------------------------------------

public class ArrayTest1 {

public static void main(String[] args) {

int[] n =  {100,90,85};

int sum = 0; //총합 변수

for (int i = 0; i < n.length; i++) {

sum += n[i];

}

//평균

System.out.println(sum/n.length);

}

}

//이것이 자바다 ~162p-----------------------------------

다차원배열

이름   국어 영어 수학 철학

서태지 100  90   80  70

유지태  90  80   70  60

...

--------------------------------------------------------

public class ArrayTest2 {

public static void main(String[] args) {

//int[][] score = new int[3][4];

//3행 4열

int[][] score = {

{100, 90, 80, 70},

{ 90, 80, 70, 60},

{ 80, 70, 60, 50}

};

System.out.println(score[0][0]);

}

}

---------------------------------------------------------

System.out.println(score.length); //행의 갯수

System.out.println(score[0].length); //0번 행의 갯수

---------------------------------------------------------

//행렬로 출력

//int[][] score = new int[3][4];

//3행 4열

int[][] score = {

{100, 90, 80, 70},

{ 90, 80, 70, 60},

{ 80, 70, 60} //가능!!

};

//System.out.println(score.length); //행의 갯수

//System.out.println(score[0].length); //0번 행의 갯수

for(int row=0; row<score.length; row++) {

for(int col=0; col<score[row].length; col++) {

System.out.print(score[row][col]+" ");

}

System.out.println();

}

--------------------------------------------------------------

//총 합계 출력

//int[][] score = new int[3][4];

//3행 4열

int[][] score = {

{100, 90, 80, 70},

{ 90, 80, 70, 60},

{ 80, 70, 60, 50}

};

//System.out.println(score.length); //행의 갯수

//System.out.println(score[0].length); //0번 행의 갯수

int sum = 0;

for(int row=0; row<score.length; row++) {

for(int col=0; col<score[row].length; col++) {

sum += score[row][col];

//System.out.print(score[row][col]+" ");

}

}

System.out.println(sum);

---------------------------------------------------------------

//점수 옆에 행별 합계 출력

int sum = 0;

for(int row=0; row<score.length; row++) {

for(int col=0; col<score[row].length; col++) {

System.out.print(score[row][col]+"\t");

sum += score[row][col];

}

System.out.println(sum);

}


----------------------------------------------------------------

//1,2학기 성적 표만들기

///////

public class ArrayTest2 {

public static void main(String[] args) {

int[][][] score = 

{

{

{100, 90, 80, 70},

{ 90, 80, 70, 60},

{ 80, 70, 60, 50}

},

{

{100,100, 80, 70},

{ 90, 90, 70, 60},

{ 80, 80, 60, 50}

}

};

System.out.println("국어\t영어\t수학\t철학\t총점\t평균");

for(int tab = 0; tab < score.length; tab++) {

for(int row = 0; row < score[tab].length; row++) {

int total = 0;

for(int col = 0; col < score[tab][row].length; col++) {

System.out.print(score[tab][row][col] + "\t");

total += score[tab][row][col];

}

System.out.println(total + "\t" + total/score[tab][row].length);

}

System.out.println();

}

}

}

-------------------------------------------------------------------

//향상된 for문, foreach문

int[] n = { 10, 20, 30 };


// for (int i = 0; i < n.length; i++) {

for (int i : n) { //foreach문 , 향상된 for문

System.out.println(i);

}

-------------------------------------------------------------------

//array는 for문으로 돌려 출력하는 것과 2차원배열만 기억해두기

-------------------------------------------------------------------

//메소드 == 함수

//중복된 부분을 피하기 위해 쓰임

//코드 중복을 없애기 위해 쓴다. -> 메소드

//아무 결과를 가지지 않고 되돌아가는 경우(return)

public class MethodTest1 {

public static void main(String[] args) {

print();

print("영석");

}


//메소드 오버로딩 method overloading, 메소드 이름은 같지만 파라미터의 갯수나 타입이 다른거

// == 메소드 중복정의라고도 한다.

private static void print(String name) {//String string = "영석"

System.out.println("hello~"+name);

}


private static void print() {

System.out.println("hello~");

return;

}

}

---------------------------------------------------------------------

private static String print2(String name) {

return "헬로~ "+name;

}

--- 어떤 형태에서도 사용할 수 있음


private static void print(String name) {// String string = "영석" //호출 당하는 쪽 : 형식 매개변수

System.out.println("hello~" + name);

return;

}

--- 자바에 콘솔모드에서 밖에 쓸수 없다.

-----------------------------------------------------------------------

--메소드를 활용한 가위바위보 게임

import java.util.Scanner;


public class IfTest4 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.print("가위는 1, 바위는 2, 보는 3 :");

int you = sc.nextInt();

int com = (int) (Math.random() * 3) + 1;


System.out.println("you : "+caption(you));

System.out.println("com : "+caption(com));


int result = 0;

if ((you == 1 && com == 3) || (you == 2 && com == 1) || (you == 3 && com == 2)) {

System.out.println("당신이 이겼습니다.");

} else if (you == com) {

System.out.println("비김");

} else {

System.out.println("짐");

}


}

//1-가위, 2-바위..를 매겨주는 메소드

public static String caption(int val) {

if (val == 1) {

return "가위";

} else if (val == 2) {

return "바위";

} else {

return "보";

}


}


//**리턴타입, 리턴의 이름과 값, 메소드 이름알기

//**private...등은 내일!

--------------------------------------------------------

//메소드 연습

//메소드 4가지 유형 파라미터는 존재 - 리턴값 존재, ...

import java.util.Scanner;


public class MethodTest3 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.print("가위, 바위, 보를 입력하세요 > ");

String you = sc.next();

String com = getHand();

System.out.println("You : "+you);

System.out.println("Com : "+com);

}


//컴퓨터의 랜덤값을 문자로 변환해 주는 메소드

private static String getHand() {

int com = (int)(Math.random()*3)+1;

return com == 1? "가위": 

   com == 2? "바위":

   com == 3? "보"  :

    "에러";

}

}

---------------------------------------------------------

//문제


import java.util.Scanner;


public class MethodTest4 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.print("넓이를 구합니다. 삼각형은 1, 사각형은 2를 입력하세요 > ");

int sel = sc.nextInt();


switch (sel) {


case 1:

{

System.out.print("밑변 : ");

int a = sc.nextInt();

System.out.print("높이 : ");

int b = sc.nextInt();

System.out.println("밑변이 " + a + ", 높이가" + b + "인 삼각형의 넓이는 " + area(a, b) + "입니다.");

}

break;

case 2:

{

System.out.print("가로 : ");

int c = sc.nextInt();

System.out.print("세로 : ");

int d = sc.nextInt();

System.out.println("밑변이 " + c + ", 높이가" + d + "인 사각형의 넓이는 " + area2(c, d) + "입니다.");

}

break;

default:

System.out.println("잘못입력하셨습니다.");

break;


}


}


private static int area2(int c, int d) {

return c * d;

}


private static double area(int a, int b) {

return (a * b) / 2.0;

}

}


---------------------------------------------------------

//메소드 오버로딩

public class MethodTest5 {

public static void main(String[] args) {

print(1);

print(2, 3);

print(4, 5, 6);


}


private static void print(int i, int j, int k) {

System.out.println(i + "\t" + j + "\t" + k);

}


// 메소드 오버로딩 : 메소드 중복정의 - 메소드 이름은 같지만 갯수나 타입이 다름

private static void print(int i, int j) {

System.out.println(i + "\t" + j);

}


private static void print(int i) {

System.out.println(i);

}

}

-----------------------------------------------------------

//메소드 오버로딩 쉽게하기 (...)

//몇개 추가적으로 만들지 않아도 된다.

//자바5부터 생김

package method;


public class MethodTest5 {

public static void main(String[] args) {

print(1);

print(2, 3);

print(4, 5, 6);

print(1,2,3,4,5,6,7,8,9,0,2,1,123,32,1);


}

// 메소드 오버로딩 : 메소드 중복정의 - 메소드 이름은 같지만 갯수나 타입이 다름

// 메소드 오버로딩을 좀 더 편하게 하기 위해서 ...이 생겼다.

// 인덱스 1개, 2개, 3개짜리가 알아서 생성된다.

// 메소드 오버로딩을 하나로 줄여버림..!!

private static void print(int... i) {

for (int j : i) {//배열이니까 foreach문으로 출력

System.out.print(j + "\t");

}

System.out.println();

}

}

// 메인도 메소드, 진입점이라고 약속만 해둔것!

// os로 넘기는 값 확인하기

// :1)일단 먼저 실행하고 Run as -> run configuration

// 2)현재 실행하고 있는거 확인 ->Arguments -> 문장입력 -> apply -> run

//삭제하고 싶을때 : 파일, 오른쪽클릭, properties, run/debug settings -> delete


-(오늘, 내일 중요!)

-객체지향개념..frame work(sping,android,디자인패턴)..


[클래스-오후]

*객체지향 프로그램 


*자바 객체지향 프로그래밍 특징 3가지

1. 캡슐화(Encapsulation)와 정보은폐(Information Hiding)

2. 상속(Inheirance)

3. 다형성(Polymorphysm)

-최소한의 간단한 프로그램을 짜고 적용!

-ex. 붕어빵

붕어빵 틀 : 클래스(설계도)

붕어빵 : 클래스를 가지고 메모리에 만들어낸 실체instance(객체..지양.."배에서배..")


클래스

인스턴스


x좌표, y좌표 2개 저장

=클래스 : 붕어빵 틀

package oop;


//x좌표, y좌표 2개 저장

//틀 생성

public class Point2D {

int x;

int y;

}



=인스턴스 : 붕어빵-클래스를 통해 메모리에 만들어진 각각의 실체

package oop;


public class PointTest {

public static void main(String[] args) {

Point2D pt = new Point2D(); // 메모리에 new키워드를 통해 인스턴스 생성, 이름을 붙인거 

pt.x = 5; //실체에 접근

pt.y = 3;

System.out.println("x : "+pt.x);

System.out.println("y : "+pt.y);

}

}

-------------------------------------------------------------------

//캡슐화와 정보은폐

//ex.게보린 성분보단 기능(머리아플때먹지)만 알기

//자동판매기 입출력 확실, 어떤 로직인지 알 필요 없음, 보여줄 필요 없음

//접근제어자 public, private -> 내부 감추기,..

//x,y를 private로 감추고 set, get(저장, 값가져오기)기능만 부여해서 

//그걸로 접근한다.(user입장)

//내부를 감추고 클래스에 어떤기능을 쓸건지 세팅 

//main에서 기능을 가져다가 쓰기만 하면 된다.


package oop;


//x좌표, y좌표 2개 저장

//틀 생성

public class Point2D {

//정보은폐

private int x;

private int y;

//기능 구현

public int getX() {

return x;

}

//멤버변수에 값을 저장

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}


}

-------------------------------------------------------------------

//상속 extends

//상속이란 개념은 확장이란 의미가 있어야 해, 뭔가가 발전되야 필요하지

//그래서 extends란 키워드를 쓴듯

//z좌표를 추가해서 만들어보자


package oop;

//상속을 받음

//super타입,부모 : 2D | child, 자식,sub타입 : 3D

public class Point3D extends Point2D {


}


package oop;


public class PointTest {

public static void main(String[] args) {

Point2D pt = new Point2D(); // 메모리에 인스턴스 생성, 이름을 붙인거 

pt.setX(5); //실체에 바로접근

pt.y = 3;

System.out.println("x : "+pt.x);

System.out.println("y : "+pt.y);

}

}

//캡슐화와 정보은폐



package oop;


public class PointTest {

public static void main(String[] args) {

Point2D pt = new Point2D(); // 메모리에 인스턴스 생성, 이름을 붙인거 

pt.setX(5); //실체에 바로접근X

pt.setY(3); //메소드를 통해 접근

System.out.println("x : "+pt.getX());

System.out.println("y : "+pt.getY());

}

}

//캡슐화와 정보은폐

----------------------------------------------------------------


package oop;

//상속을 받음

//super타입,부모 : 2D | child, 자식,sub타입 : 3D

public class Point3D extends Point2D {

//내부를 감추고

private int z;


//기능을 구현

public int getZ() {

return z;

}


public void setZ(int z) {

this.z = z;

}

}



package oop;


public class PointTest {

public static void main(String[] args) {

Point3D pt = new Point3D(); // 메모리에 인스턴스 생성, 이름을 붙인거 

pt.setX(5); //실체에 바로접근X

pt.setY(3); //메소드를 통해 접근

pt.setZ(4);

System.out.println("x : "+pt.getX());

System.out.println("y : "+pt.getY());

System.out.println("z : "+pt.getZ());

}

}

//캡슐화와 정보은폐