[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());
}
}
//캡슐화와 정보은폐