PC

블로그 이미지

DAVID

160321: 6회차

Programming 2016. 3. 21. 13:21

종료하기 전 티스토리 네이버 로그아웃 할 것


1. 툴

동일

추가시: 


2. 폴더

동일

추가시:


3. 사용할 사이트

동일

추가시:


4. 공부하는 것

아침엔 클래스랑 객체 리뷰


<<메모리친구>>

힙: 객체 + 배열 - 얘네는 멤버변수 크기만큼 잡음(메모리 낭비 심한것)

스택:: 지역변수 - 부르면 챱챱

코드: 메소드

데이터: 얜 나중에 :>


클래스: 객체 정의 + 객체의 모임    -붕어빵틀    -은행계좌(발급용)

객체: 얘가 실체임 ㅇㅇ = 인스턴스    -붕어빵    -ㅁㅁ의계좌


빵먹고싶당


Class 만들 때 메소드처럼 클래스명() 이렇게 만들면 안됨... 자꾸 헷갈리는것


클래스(파라미터 = 매개변수 = 인자)

파라미터는 데이터 호출용인데 this.인자 = 값 하면 접근 가능함.


객체는 서로 독립적인 형태로 사용하쉬는것


객체 생성할 떄는 new를 쓴다 = 메모리 할당 용도.


메소드를 기본형 인자로 생성을 하면 return 없으면 안돌아감...

void는 리턴값 없어도 되어서 괜찮음.


메소드안에서 자기네 클래스 다른 메소드 호출 가능 - ㅇㅇ


메소드는 많이 만들어도 성능 저하는 없음.

멤버 변수는 많이 만들면 성능 저하가 있는것 ㅠㅠ


자바는 포인터가 없어서 그...그거는 불가능 (-_-);;; - 그거 ... ㅇ...



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


객체:


상속

다형성

캡슐화 - 세터 & 게터 사용해서 접근 하는 것 - 안에 있는 성분은 모르는데 사용하는 법은 아는것 ((ex) 감기약 같은)


- 캡슐화:

 private로 멤버변수를 선언하면 그 클래스 내에서밖에 접근을 못함 

- 예를 들어 main이 있는 클래스에서 private로 선언된 남의 클래스 변수를 직접 못 접근하니까

setter랑 getter (값을 저장하고 / 가져오고) 를 꼭 선언해줘야 한다.


이게 메소드 이름이 setter가 아니라 그냥 기능적인 요소 


private String name;

private int bonbong;

public void setName(String name){

}


요러면 위에 지역변수 name은 힙 영역

밑에 파라미터는 스택영역에 메모리를 잡아서 이름이 같아도 되긴 하는데

이름이 같을 경우

public void setName(String name){

name = name;

}

요렇게 하면 어느 name인지 모르니까 // 사실 자기가 속한 지역변수가 우선이라서 저건 파라미터 = 파라미터 라는 식임 

this.name = name; 으로 고치면

this.name은 위에 지역변수고

name은 파라미터인것.


public void setName(String name){

this.name = name;

}

어쨌든 이게 세터


public String getName(){

return name;

}

이게 게터.


근데 지역변수랑 파라미터랑 이름이 같지 않으면 this 안 써줘도 됨...


세터랑 게터를 하나하나씩 다 만들어 줘야 하는군

안써도 게터를 만들어 줘야 함



2교시때까지 저번 주 코드를 setter getter로 고치는 거 하고있음.



식별자 이름  setName 같이 set 다음에 대문자 한번 써줄 것.

오류는 안 나는데 나중에 프로젝트 하거나 다른 사람과 협업 할 시 귀찮아지니까...

-> 이뿌게 쓸것


이런 이클립스에서 이거 자동 생성할 수 있는 거였음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

으아아 그래도 코딩 연습을 잘 했슴니다 :<


아니 그냥 세터 게터를 하나씩 만들어주고 세터를 호출해주는 메소드를 만들면 되겠군...? 귀찮음맨인것 ...

ㄴ 이건 생성자를 통해서 한번에 박을수가 있어서 필요없는것... 그러니까 저것은 따로 쓰려고 만든 애입니다

이런것도 되나


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


멤버 메소드

main은 멤버 메소드가 아님

근데 메인 말고는 다 멤버 메소드라고 생각하면 그것도 아니긴한데 일단 ... 내가 만든 건 다 멤버 메소드임.


메소드네 인스 데이터 타입은 리턴값과 일치해야함 

그리고 파라미터랑 호출시 데이터 타입도 일치해야함 - 그러니까 데이터 형 맞추라고 

또한 매개변수 써야 하는 거에 안 쓰면 또 오류남. - 주의할 것


메소드 오버로딩  -과

메소드 오버라이딩 - 을 사용해서 메소드를 확장시킴

ㄴ 나중에 하실것


리턴타입 메소드명(파라미터){

메소드내용

}





-유효 범위-


1. 멤버변수(=인스턴스 변수, 필드) - 힙 메모리 이용

메소드 밖에 선언됨

모든 메소드가 사용 가능

변수 사용이 끝나도 GC에 의해 회수 되기 전에는 할당 메모리 유지함. - 그래서 많이 만들면 메모리 낭비인것

GC: 가비지 컬렉터임

값을 안 줘도 기본 값으로 초기화됨! - null, 0, false 이런거...


2. 지역변수 - 스택 메모리 이용

메소드 안에 선언됨

이용이 끝나면 메소드 영역이 없어지면서 변수도 회수됨.

굳이 초기화 안하면 못 쓴다!


그러니까 스택 메모리 쓸 때는 임시적으로(지역변수) 쓰는 거니까 넣었다 뺐다 하기 좋은 스택

힙은 고정적으로 쓰고 ㅂㅂ 할거니까 관리할 수 있는 힙 (객체와 배열 방을 만듬)


// this로 멤버변수 접근

전역 변수 스트링은 정수형크기 정도 되겠다 싶은 것...


package day06;


public class Variable {

String movie = "트로이"; // heap memory


public void show() {

System.out.println("show 메소드 영역: " + movie);

// movie라는 지역변수의 부재로 전역변수 출력

}


public void title() {

String movie = "아마겟돈"; // stack memory

System.out.println("title 메소드 영역: " + movie); // 아마겟돈

System.out.println("title this.movie: " + this.movie);// 트로이

}


public static void main(String[] args) {

Variable v = new Variable();

//show 시작하면 스택 영역에 메모리 잡고

v.show(); // 트로이

//show 끝나면 스택 영역에 메모리 잡았던거 사라지고

v.title(); // 아마겟돈 트로이

}

//메인 끝나고 바로 해제하는 게 아니라 가비지컬렉터가 놀다가 얘를 참조하는 애가 아무도 없을 때 메모리 삭제 - 할거 많으면 천천히 삭제

}


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


package day06;


public class Variable {

String movie; // heap memory


public void show() {

System.out.println("show 메소드 영역: " + movie);

// movie라는 지역변수의 부재로 전역변수 출력

}


public void title() {

String movie; // stack memory

System.out.println("title 메소드 영역: " + movie); // 아마겟돈

System.out.println("title this.movie: " + this.movie);// 트로이

}


public static void main(String[] args) {

Variable v = new Variable();

v.show(); // 트로이

v.title(); // 아마겟돈 트로이

}

}


요렇게 하면 지역변수 movie는 초기화 안해줬다고 오류 뜸
멤버변수는 오류 x (null값이 기본값)


package day06;


public class Block {

String Block = "재미있는 영화"; // 멤버변수 힙


public static void main(String[] args) {

Block b0 = new Block();


String b1 = "트로이"; // 지역변수 스택

System.out.println("Movie: " + b1);


{

String b2 = "우주전쟁"; // 얘는 지역변수

System.out.println("Movie: " + b2);


int i = 0; // 얘도 지역변수


for (int j = 0; j < 5; j++) {

// j도 지역변수다

}

// System.out.println(j); //이거 for문 안의 지역변수라서 x


for (i = 0; i < 5; i++) {


}

System.out.println("i: " + i);// 얘는 선언을 밖에서 해서 ㄱㅊ

} // end {}


System.out.println("Movie: " + b1);

System.out.println("테스트: " + b0.Block);

// System.out.println("Movie: " + b2); //이거 {}안의 지역변수임


}// end main

}



근데

//Block b0 = new Block();

//System.out.println("테스트: " + b0.Block);

요렇게 하면 Block 스택 메모리 잡지 않음


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


Call by Value - 값에 의한 호출 

ㄴ 이거는 메소드 호출시 값을 주는것 

보통 숫자 계열 - 근데 그냥 기본형이면 거의 다 되는것인듯

문자도되고

숫자도되고 어쨌든 예시


구냥 메소드(정수) <- 이렇게 생겼으면 콜바이밸류

값을 복사하는 개념이라서 call by value



Call By Value 예시는 .java 파일 2개 뜨는 것...

그리고 생성자도 써보았다.

생성자는 리턴 타입이 없으신것


public class Person{

public Person(String s){

name= s;

}

}

저렇게 생김.

public Person(String name){

this.name = name;

}

이거랑 같은거지만 그냥 s로 쓰셨길래...


package day06;


class Code{

public String getArea(int index){

String [] areas = {"서울", "천안", "대전", "대구", "광주", "강릉"};

return areas[index-1];

}

}


public class CodeUse {

public static void main(String[] args) {

Code co = new Code();

String area = co.getArea(6);

System.out.println(area);

}

}



요기서
co.getArea(6) <- 이부분이 Call by value







Call by Reference 

ㄴ 이거는 메소드 호출시 해시코드를 주는것

상수 문자열

메소드로 참조 타입을 전송 가능
참조값을 전달한 애는 값 변화 & 힙 메모리 공유한다.


예시가 이건데


package day06;


class SchoolVO {

String name = "";

int kuk;

int eng;

int tot;

double avg;

public SchoolVO(String name, int kuk, int eng){

this.name = name;

this.kuk = kuk;

this.eng = eng;

tot = kuk + eng;

avg = (double)tot/2;

}

}


class SchoolProc2{

public void print(SchoolVO v){

System.out.println("vo.name: " + v.name);

System.out.println("vo.kuk : " + v.kuk);

System.out.println("vo.eng : " + v.eng);

System.out.println("vo.tot : " + v.tot);

System.out.println("vo.avg : " + v.avg);

}

}


public class SchoolUse2 {

public static void main(String[] args) {

SchoolVO vo = new SchoolVO("길동", 85, 80);


// vo.name = "길동";

// vo.kuk = 90;

// vo.eng = 80;

// vo.tot = vo.kuk+vo.eng;

// vo.avg = vo.tot/2;

SchoolProc2 sp = new SchoolProc2();

sp.print(vo);

}

}


여기선 sp.print(vo); 부분이 call by reference 인것 - 왜냐면 vo의 해시코드 값을 주는 것이기 때문에

package day06;


class SchoolVO {

String name = "";

int kuk;

int eng;

int tot;

double avg;

public SchoolVO(String name, int kuk, int eng){

this.name = name;

this.kuk = kuk;

this.eng = eng;

tot = kuk + eng;

avg = (double)tot/2;

}

}


class SchoolProc2{

public void print(SchoolVO v){

System.out.println("vo.name: " + v.name);

System.out.println("vo.kuk : " + v.kuk);

System.out.println("vo.eng : " + v.eng);

System.out.println("vo.tot : " + v.tot);

System.out.println("vo.avg : " + v.avg);

System.out.println("SchoolProc2()-vo 해시코드: " + v.hashCode());

}

}


public class SchoolUse2 {

public static void main(String[] args) {

SchoolVO vo = new SchoolVO("길동", 85, 80);


// vo.name = "길동";

// vo.kuk = 90;

// vo.eng = 80;

// vo.tot = vo.kuk+vo.eng;

// vo.avg = vo.tot/2;

System.out.println("main()-vo 해시코드: " + vo.hashCode());

SchoolProc2 sp = new SchoolProc2();

sp.print(vo);

}

}


요렇게 하면 해시코드 값이 동일한 걸 확인할 수 있음.
주소값 = 해시코드 복사!

그래서 같은 곳을 가리키게 되기 때문에 영역을 공유한다고 함.


//schoolProc2도 변수를 만들지는 않지만 해시코드가 있긴 있음.



-------------------------밥-----------------------------

먹고 와서 이거 하는 중임


package day06;


class Pay {

int ppp;


public void payRefer(Pay a) {

a.ppp = a.ppp + 2000;

}


public void payValue(int j) {

j = j + 2000;

}


}


public class PayTest {

public static void main(String[] args) {

Pay p = new Pay();

p.ppp = 10;

int i = 10;


p.payRefer(p);// cb reference

p.payValue(i);// cb value p.payValue(10)이랑 같은 것 - 변수값을 준다고 cbr이 아닌것 :>


System.out.println(p.ppp);// 2010

System.out.println(i); // return을 안받아서 그냥 i = 10

}

}


근뎅 

public void payRefer(Pay a) {

a.ppp = a.ppp + 2000;

}

이럴 경우에

public void payRefer(Pay a) {

a.ppp = a.ppp + 2000;

a.payRefer(null);

}


이렇게 넣으면 어떻게 되지 - 메소드 파라미터로 자기 자신의 클래스를 받을 때 'ㅅ')...? - 생성자는 배울 것


ㅠㅠ리액션이 안좋은것...


그리고 왜

public int payValue(int j) {

j = j+2000;

System.out.println(" " +j);

return j;

}

하면 리턴값이 2010이 아니라 10이지?


아 이게 지역변수라서 j가 메소드 완료되면 없어져서 그런가보당 맞나 -> 아님 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ


i = p.payValue(i);

i에다가 안넣음 ㅋㅋㅋㅋㅋㅋ


package day06;


class Pay {

int ppp;

int num;

public void payRefer(Pay a) {

a.ppp = a.ppp + 2000;

//a.payRefer(null);

}


public int payValue(int num) {

this.num = num+2000;

// System.out.println(this.num);

return this.num;

}


}


public class PayTest {

public static void main(String[] args) {

Pay p = new Pay();

p.ppp = 10;

int i = 10;


p.payRefer(p);// cb reference

i = p.payValue(i);// cb value p.payValue(10)이랑 같은 것


System.out.println(p.ppp);// 2010

System.out.println(i); // return을 안받아서 그냥 i = 10

}

}


마지막에 i에다가 넣어줘야 한다!
결과값 이상할 때는 메인문 확인해 볼 것....!!!!!


call by value

매개 변수 전달 방식: 값 복사

장점: 원본 값 보호 가능

단점:  메모리 낭비...(별로 안심함)

매개변수 타입: 기본 데이터 타입


call by reference

매개 변수 전달 방식: 레퍼런스 넘겨줌(해시코드)

장점: 메모리 절약(기억장소 공유)

단점: 원본 값 변환됨

매개변수 타입: 레퍼런스(참조)타입 (배열도 포함)


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


String 객체는 의외로 call by reference인데

call by value 같이 생겼음... - 기본형 변수 타입이 아닌것...


문자열 타입은 - 스트링 / 스트링버퍼 / 스트링빌더 가 있는데

스트링만 불변의 특징이 있는것


얘는 다른 애들하고 달라서 "한번정한글자" 를 "한번정한글자당" 으로 바꿀 수 없음.

그냥 "한번정한글자" 가 땡


그리고 클래스인데도 new 안써도됨 ㅇㅇ String name = new String()일케 안써도 됨

그냥 String name = "홍길동" 하면 객체화 완료


그런데 StringBuffer 는 StringBuffer sb = new StringBuffer("홍길동"); 한다음에

StringBuffer sb2 = new StringBuffer("홍길동"); 하면 sb의 홍길동과 sb2의 홍길동은 다른 홍길동인것


근데 String은 

String name = "홍길동"; 하고 String name2 = "홍길동"; 이 가리키는 해시코드값이 동일함 (메모리상으로 하나인것)


만약에 문자열 변경할 때 "안녕" -> "안녕하세요" 했으면

이거 메모리가 해제 안되고 그냥 안녕도 있고 안녕하세요도 있는것...

그러니까 문자열 계속 변경되는 프로그램이면 스트링버퍼 이런걸 써야함 ... <<- 스트링쓰면 메모리 많이 잡아먹는것




문자열 비교할 때는 == 쓰지말고 equals 쓰자!!!


        //System.out.println("ABCD".toLowerCase());  //소문자로 변환     

            //System.out.println("abcd".toUpperCase());  //대문자로 변환

        //System.out.println("ABCD".hashCode()); //해시코드 출력




package day06;


public class StringTest {

public void changeString(String src) {

src = "JSP";

}


public static void main(String[] args) {

// System.out.println("ABCD".toLowerCase());

// System.out.println("abcd".toUpperCase().hashCode());

// System.out.println("ABCD".hashCode());


String step = "JAVA";

StringTest st = new StringTest();

System.out.println(step);


st.changeString(step);//JSP로 변경하기 위해 할당 -> 이긴한데 아까 내가 틀린것처럼 

//step = st.changeString(step);으로 안 고쳐주면 쟤는 증발하는 메소드의 멤바라서 값 차이 없음

System.out.println(step);

}

}


//call by reference치고 넘나 value 같은 것...-_-);;;;;

//


이거 했음.

public void changeString(String src) {

src = "JSP";

}

요게 값을 바꾸는 게 아니라 "JSP"라는 객체를 생성하는거임
그러니까 step이 가리키는 "JAVA"의 값을 바꿔주는 게 아니라서 별반 차이 없음.
결국 결과값을 도출하기 위해서는 값을 받지 않으면 GC인것


저거 위에도

public String changeString(String src) {

return "JSP";

}

이렇게 바꿔주고 step = st.changeString(step) 해줘야 값이 도출된다.

이거 값 받는 걸 자꾸 빠트리니까 메인 문 확인 조심해서 할 것!!!!



멤버변수 = 필드 = 인스턴스변수



package Test_day06;


class Goods {

private String name;

private int price;

private int numberOfStock;

private int sold;


void setName(String name) {

this.name = name;

}


void setPrice(int price) {

this.price = price;

}


void setNumberOfStock(int numberOfStock) {

this.numberOfStock = numberOfStock;

}


void setSold(int sold) {

this.sold = sold;

}


String getName() {

return name;

}


int getPrice() {

return price;

}


int getNumberOfStock() {

return numberOfStock;

}


int getSold() {

return sold;

}


Goods(String name, int price, int numberOfStock, int sold) {

this.name = name;

this.price = price;

this.numberOfStock = numberOfStock;

this.sold = sold;

}// 생성자


}


public class GoodsArray {

public static void main(String[] args) {

Goods goodsArray[] = new Goods[3];


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

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("입력하세요: ");

String name = s.next();

int price = s.nextInt();

int n = s.nextInt();

int sold = s.nextInt();

goodsArray[i] = new Goods(name, price, n, sold);

} // end for


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

System.out.print(goodsArray[i].getName() + " ");

System.out.print(goodsArray[i].getPrice() + " ");

System.out.print(goodsArray[i].getNumberOfStock() + " ");

System.out.println(goodsArray[i].getSold() + " ");

} // end for

}

}



이거 입력하세요 부분 없으면 아무것도 안 뜨는것처럼 나옴... -_-);;;
이클립스클라스...

생성자! 
생성자의 매개변수를 통해서 초기화도 하고 입력도 받고 편함 ㅇㅇ

Goods goodsArray[] = new Goods[3];

이거는 

Goods [] goodsArray;

goodsArray = new Goods[3]; 하고 같은거임


static 메소드 사용해 보았다!


package Test_day06;


public class ArrayParameter {


static void replaceSpace(char a[]) {

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

if (a[i] == ' ') {

a[i] = ',';

// 만약에 공백이 있으면 ,로 바꿔줌.

} // end if

} // end for

}// end replaceSpace


static void printCharArray(char a[]) {

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

System.out.print(a[i]);

}//end for

System.out.println();

// 배열의 문자 출력 -> 다 찍으면 줄바꿈

}//end printCharArray


public static void main(String[] args) {

char c[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'p' , 'e', 'n', 'c', 'i', 'l', '.'};

printCharArray(c);

replaceSpace(c);

printCharArray(c);

}

}


처음엔 그냥 찍어보고 + 공백을 ,로 바꾸고 찍어주고

오!
메소드는 <<코드>>영역에 메모리가 할당되는데 
static이 붙은 메소드나 변수는 <<데이터>> 영역에 메모리가 할당된다.

코드영역 - 해시코드를 통해 접근 필요 (메소드만 옴)
데이터영역 - 객체 생성할 필요 없이 클래스를 통해 바로 변수에 접근 가능 (메소드랑 변수가 옴)


이거 생성자를 이용해서 입력받게 고쳐보기.


package Test_day06;


import java.util.Scanner;


class realCalc {

String cal_num;

double num1, num2;

double printnum;

Scanner s = new Scanner(System.in);


// +

public double pls() {

return num1 + num2;

}


// -

public double min() {

return num1 - num2;

}


// *

public double mul() {

return num1 * num2;

}


// /

public double div() {

return num1 / num2;

}


// %

public double res() {

return num1 % num2;

}


public void inputNumber() {

System.out.print("연산자를 입력하세요: ");

this.cal_num = s.nextLine();


System.out.print("계산할 숫자 두개를 입력하세요: ");

this.num1 = s.nextInt();

this.num2 = s.nextInt();

}


public void printNumber() {

System.out.println("연산자는: " + cal_num);

System.out.println("결과값은: " + printnum);

}


public void calcInput() {

switch (cal_num) {

case "+":

printnum = pls();

break;

case "-":

printnum = min();

break;

case "*":

printnum = mul();

break;

case "/":

printnum = div();

break;

case "%":

printnum = res();

break;

}// end switch

}

}


public class Calculator_machine {

public static void main(String[] args) {

realCalc rc = new realCalc();

rc.inputNumber();

rc.calcInput();


rc.printNumber();


}

}


응 생성자를 이용해서 입력받게 고치고 변수도 더 줄였음.


package Test_day06;


class realCalc {

int num0;// 입력용 연산자

double num1, num2;// 입력용 숫자1, 숫자2 - 숫자 2를 저장으로 사용


String printbuho;// 부호 출력


realCalc() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("연산자를 입력하세요(1 = +, 2 = -, 3 = *, 4 = /, 5 = %) \n: ");

this.num0 = s.nextInt();


System.out.print("계산할 숫자 두개를 입력하세요: ");

this.num1 = s.nextDouble();

this.num2 = s.nextDouble();

}


// +

public double pls() {

printbuho = "+";

return num1 + num2;

}


// -

public double min() {

printbuho = "-";

return num1 - num2;

}


// *

public double mul() {

printbuho = "*";

return num1 * num2;

}


// /

public double div() {

printbuho = "/";

return num1 / num2;

}


// %

public double res() {

printbuho = "%";

return num1 % num2;

}


// public void inputNumber() {

// System.out.print("연산자를 입력하세요: ");

// this.num0 = s.nextInt();

//

// System.out.print("계산할 숫자 두개를 입력하세요: ");

// this.num1 = s.nextDouble();

// this.num2 = s.nextDouble();

// }


public void printNumber() {

System.out.println("연산자는: " + printbuho);

System.out.println("결과값은: " + num2);

}


public void calcInput() {

switch (num0) {

case 1:

num2 = pls();

break;

case 2:

num2 = min();

break;

case 3:

num2 = mul();

break;

case 4:

num2 = div();

break;

case 5:

num2 = res();

break;

}// end switch

}

}


public class Calculator_machine {

public static void main(String[] args) {

realCalc rc = new realCalc();

// rc.inputNumber();

rc.calcInput();


rc.printNumber();


}

}



-----------------------------배열----------------------


package Test_day06;


class realCalc2 {

int num0;// 입력용 연산자

double num[] = new double[2];// 입력용 숫자 1,2 - 2를 출력용으로 사용

String print_modulus;// 부호 출력용


realCalc2() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("연산자를 입력하세요(1 = +, 2 = -, 3 = *, 4 = /, 5 = %) \n: ");

this.num0 = s.nextInt();


System.out.println("계산할 숫자 두개를 입력하세요: ");

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

System.out.print((i + 1) + "번째 숫자를 입력하세요: ");

num[i] = s.nextDouble();

}

}


public void printNumber() {

System.out.println("연산자는: " + print_modulus);

System.out.println("결과값은: " + num[num.length - 1]);

}


public void calcInput() {

switch (num0) {

case 1:

print_modulus = "+";

num[num.length - 1] = num[num.length - 2] + num[num.length - 1];

break;

case 2:

print_modulus = "-";

num[num.length - 1] = num[num.length - 2] - num[num.length - 1];

break;

case 3:

print_modulus = "*";

num[num.length - 1] = num[num.length - 2] * num[num.length - 1];

break;

case 4:

print_modulus = "/";

num[num.length - 1] = num[num.length - 2] / num[num.length - 1];

break;

case 5:

print_modulus = "%";

num[num.length - 1] = num[num.length - 2] % num[num.length - 1];

break;

}// end switch

}

}


public class Calculator_machine2 {

public static void main(String[] args) {

realCalc2 rc = new realCalc2();

rc.calcInput();


rc.printNumber();


}

}


Math.sqrt = 루트임 ㅋㅋㅋㅋㅋ
으아 도형 둘레 넓이 ㅋㅋㅋㅋㅋㅋㅋㅋ

캡슐화 private!
setter getter ㅋㅋㅋㅋㅋㅋㅋ - 생성자금지

------------어 하다 끊김 ---------------

package Test_day06;

//파이: Math.pi
class Circle{
//변수는 private
private double num;
private double value;
java.util.Scanner s = new java.util.Scanner(System.in);
public void setNum(){
num = s.nextDouble();
}//setter
public double getNum(){
return num;
}//getter
public void area(){
value = num * num * Math.PI;
}//넓이
public void round(){
}//둘레
public void radius(){
}
//반지름
}

class Triangle{
private int num;
public void area(){
}//넓이
public void round(){
}//둘레
//세변길이
}

class Rectangle{
private int num;
public void area(){
}//넓이
public void round(){
}//둘레
//가로세로길이
}

public class Shape {
public static void main(String[] args) {
}
}



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

http://mathbang.net/99

http://tip.daum.net/question/60107844https://www.google.co.kr/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%EB%84%93%EC%9D%B4%EC%99%80+%EB%91%98%EB%A0%88+%EA%B5%AC%ED%95%98%EB%8A%94+%EA%B3%B5%EC%8B%9D


어 다 짰는데 수정해볼 거 있나 보기..


package Test_day06;


class Circle {

// 변수는 private

private double num;


public void setNum() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("반지름을 입력하세요: ");

this.num = s.nextDouble();

}// setter


public double getNum() {

return num;

}// getter


public double area() {

double val_area;

val_area = num * num * Math.PI;

return val_area;

}// 넓이


public double round() {

double val_round;

val_round = num * 2 * Math.PI;

return val_round;

}// 둘레


public void printShape() {

java.text.DecimalFormat d = new java.text.DecimalFormat(".##");

System.out.println("넓이: " + d.format(area()));

System.out.println("둘레: " + d.format(round()));

}// 출력


}


class Triangle {

private double num1, num2, num3;


public void setNum1() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("삼각형 한 변의 길이를 입력하세요.\n1): ");

this.num1 = s.nextDouble();

}// setter


public double getNum1() {

return num1;

}// getter


public void setNum2() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("삼각형 한 변의 길이를 입력하세요.\n2): ");

this.num2 = s.nextDouble();

}// setter


public double getNum2() {

return num2;

}// getter


public void setNum3() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("삼각형 한 변의 길이를 입력하세요.\n3): ");

this.num3 = s.nextDouble();

}// setter


public double getNum3() {

return num3;

}// getter


public double area() {

double val_area;

double sum = (num1 + num2 + num3) / 2;

val_area = Math.sqrt(sum * (sum - num1) * (sum - num2) * (sum - num3));

return val_area;

}// 넓이


public double round() {

double val_round;

val_round = num1 + num2 + num3;

return val_round;

}// 둘레


public void printShape() {

java.text.DecimalFormat d = new java.text.DecimalFormat(".##");

System.out.println("넓이: " + d.format(area()));

System.out.println("둘레: " + d.format(round()));

}// 출력


}


class Rectangle {

private double num1, num2;


public void setNum1() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("사각형 한 변의 길이를 입력하세요.\n1): ");

this.num1 = s.nextDouble();

}// setter


public double getNum1() {

return num1;

}// getter


public void setNum2() {

java.util.Scanner s = new java.util.Scanner(System.in);

System.out.print("사각형 한 변의 길이를 입력하세요.\n2): ");

this.num2 = s.nextDouble();

}// setter


public double getNum2() {

return num2;

}// getter


public double area() {

double val_area;

val_area = num1 * num2;

return val_area;

}// 넓이


public double round() {

double val_round;

val_round = (num1 + num2) * 2;

return val_round;

}// 둘레


public void printShape() {

java.text.DecimalFormat d = new java.text.DecimalFormat(".##");

System.out.println("넓이: " + d.format(area()));

System.out.println("둘레: " + d.format(round()));

}// 출력


}


public class Shape {

public static void main(String[] args) {

Circle david = new Circle();

Triangle david2 = new Triangle();

Rectangle david3 = new Rectangle();


david.setNum();


david2.setNum1();

david2.setNum2();

david2.setNum3();


david3.setNum1();

david3.setNum2();

david.printShape();

david2.printShape();

david3.printShape();

                  

}

}




5. 수업

진도: 

hw:

 

1. 커서 고정하는 법


6. 할것

졸려서 1교시 수업시간 끝나고 잤음...

1. 오늘은 일찍 잘 것

2. 자료구조 메모리 쪽 볼 것 (힙 스택)

3. 아무래도 BMO 지갑 사야함 (이유: 귀여움)

4. 머리카락을 자르러 가야함(안 피곤한 날? 'ㅁ')

5. 이모한테 전화할 것

6. 배타적 논리합 / 논리합 / 논리곱 한번 더 안보고 쓸 것

7. 오락실에 다트판 없나 봐야지...

8. 그리고 그냥 슬리퍼 갖다놔도 되지 않을까

9. http://www.lectureblue.pe.kr/reqtiles/gread.jsp?bbsno=473&nowPage=1&col=content&word=equals&code=5

이거 do-while로 짜보기.





*1. 하얀색 옷 살 것

*2. 마방진으로 하트 만들어보기


'Programming' 카테고리의 다른 글

160323: 8회차  (1) 2016.03.23
160322: 7회차  (4) 2016.03.22
160318: 5일차  (2) 2016.03.18
160317: 4회차  (3) 2016.03.17
160316: 3회차  (2) 2016.03.16
Posted by DAVID
블로그 이미지

by DAVID

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

글 보관함

«   2025/06   »
일 월 화 수 목 금 토
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

링크

카테고리

PC (112)
Programming (109)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
DAVID's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

PC

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • PC (112)
    • Programming (109)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바