2008. 8. 5. 16:33

Part2. 메소드 나머지 부분 & Part 3. 클래스와 객체(11. 클래스와 객체)

자바 클래스 선언하기

class 클래스 이름 {
  접근 지정자, 자료형, 변수;
  접근 지정자, 생성자() {
  ...
  }
  접근 지정자, 자료형, 메서드 이름() {
  ...
  }

// 절대값 구하기
package training;
public class Ex01 {
 static int compare(int a){
  //int abs;
  if(a<0){
   a=-a;
  }
   return a;
   // 함수를 호출해 준 곳으로 결과값으로 구한 절대값을 되돌려준다.
   //System.out.println(a);
 }
 public static void main(String[] args) {
  int a=-5; // 지역변수
  System.out.println("compare(a) : " + compare(a));
 }
}

// 1부터 입력 받은 수 까지의 자연수의 합을 구하시오.
// 입력 받은 수의 팩토리알을 구하시오.
package training;
public class Ex03 {
 static int sum(int n){
  int total=0;
  for(int i=1;i<=n;i++){
   total+=i;
  }
  return total;
 }
 static int fac(int m){
  int total=1;
  for(int i=1;i<=m;i++){
   total*=i;
  }
  return total;
 }
 public static void main(String[] args) {
  int n=Integer.parseInt(args[0]);
  System.out.println(" total =" + sum(n));
  System.out.println(" fac =" + fac(5));
 }
}

접근 지정자 :

// 객체 설명
package training;
// 새로운 자료형을 설계 -> 객체(인스턴스변수를 찍어 내기위한 틀)
class Animal{  // 클래스 내부에 멤버를 정의
    // 변수 형태의 속성 : 단순히 값을 저장하는 용도로 사용된다.
 private String name;
 // 캡슐화는 속성에 합당한 값만 저장할 수 있도록 하기 위해서 속성을
 // 외부에서 접근 못하도록 하고 대신 메소드로 접근하도록 한다.
 private int age;  // 접근 지정자 private은 해당 멤버를
                       // 자신의 클래스내의 메소드에서만 사용가능
 public String getName(){ // 속성값을 얻어옴(getter)
  return name;
 }
 public void setName(String new_name){ // 속성을 새로운 값으로 설정(setter)
  name=new_name;
 }
 public int getAge(){ // 속성값을 얻어옴(getter)
  return age;
 }
 public void setAge(int new_age){ // 속성을 새로운 값으로 설정(setter)
  if(new_age>=0)
  age=new_age;
 }
}
public class Ex04 {
 public static void main(String[] args) {
  // 클래스로 선언된 변수는 레퍼런스 변수로 실질적으로
  // 값을 저장할 공간을 마련하지 못한다. -> 실체를 참조하는 용도로 쓰인다.
  Animal a; // a는 선언 시, 기술한 자료형에 의해 형태가 결정된다.
  // 클래스로 실질적인 값을 저장할 공간을 마련하기 위해서는
  // new 연산자를 사용한다.
  // 힙영역에 생성된 실체는 이름이 없지만
  // new 연산자가 메모리 할당 후, 그 메모리의 위치정보를 되돌려 주면
  // 그 위치정보를 레퍼런스변수에 저장해야만 이 실체에 접근할 수 있다.
  a=new Animal();
  // 객체를 멤버 단위로 접근해서 사용함 : 멤버 참조 닷 연산자
  a.setName("사자"); //="원숭이"; // Animal 객체의 이름을 설정한다.
  a.setAge(26);
  // a.age=-26; // Animal 객체의 나이를 설정한다. // 속성을 새로운 값으로 설정
  // 이름하고 나이를 출력
  System.out.println(a.getName() + " , " + a.getAge()); // 속성값을 얻어옴
  // Animal 객체를 하나더 생성하여
  // 레퍼런스 변수 b로 접근하도록 하고
  // 이름은 "펭귄" 나이는 12로 저장하고 출력
  /*Animal b = new Animal();
  b.name="펭귄";
  b.age=12;
  System.out.println(b.name + "," + b.age);*/
 }
}

// int x를 private로 바꿨을 때 출력하기 위한 작업을 하시오.
package training;
class Thing{
 private int x;

 public int getX() {
  return x;
 }

 public void setX(int x) {
  this.x = x;
 }
}
public class Ex05 {
 public static void main(String[] args) {
  Thing thing = new Thing();
  thing.setX(10); //=10;
  System.out.println("x : " + thing.getX());
 }
}

// 속성으로 자판기에서 취급하는 제품의 정보를 저장하는 변수와 이를 다루기 위한 메소드를 갖는 자판기 클래스를 선언하고
// 다음과 같은 결과가 나오도록 객체 생성 후 메소드를 호출하시오.
// 복습할 때 모듈화를 시키시오.
// name, price를 private로 지정하고 출력할 수 있는 작업을 하시오.
package training;
class Product{
 private String name;
 private int price;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getPrice() {
  return price;
 }
 public void setPrice(int price) {
  this.price = price;
 }
 
}
public class Ex06 {
 public static void main(String[] args) {
  /* Product a = new Product();
  a.name="커피";
  a.price=500;
  Product b = new Product();
  b.name="웰치스";
  b.price=700;
  Product c = new Product();
  c.name="포카리";
  c.price=500;
  Product d = new Product();
  d.name="비타500";
  d.price=500;
  for(int i=1;i<=4;i++)
  // System.out.println(a[i].name + ":" + a[i].price + "원");
  System.out.println(a.name + ":" + a.price + "원");
  System.out.println(b.name + ":" + b.price + "원");
  System.out.println(c.name + ":" + c.price + "원");
  System.out.println(d.name + ":" + d.price + "원"); */
 
  // 레퍼런스 변수가 4개 필요
  Product [] a= new Product[4]; // 레퍼런스 값 4개 저장되는 배열
  // 인스턴스 4개 생성해서 레퍼런스 변수가 가리키도록 해야 함
  for(int i=0;i<a.length;i++){
   a[i] = new Product();
  }
   a[0].setName("커피") ; a[0].setPrice(150);
   a[0].setName("웰치스") ; a[0].setPrice(700);
   a[0].setName("포카리") ; a[0].setPrice(500);
   a[0].setName("비타500") ; a[0].setPrice(500);
   for(int i=0;i<a.length;i++){
    System.out.println(a[i].getName() + " , " + a[i].getPrice());
   }
 
 }
}

'수업 > 자바2JDK입문' 카테고리의 다른 글

Part 4. 상속 I  (0) 2008.08.08
Part 3. static  (2) 2008.08.07
Part 3. 생성자  (0) 2008.08.07
Part 2 & 3 메소드와 클래스  (0) 2008.08.06
PART 2(7 제어문의 다양한 활용 ~ 10 사용자정의 메서드 만들기)  (0) 2008.08.04
2008. 7. 16. 19:11

chapter 5. 프로그램 만들기

클래스 개발 일반론

1. 클래스에서 어떤 것을 해야 하는지 파악한다.
2. 인스턴스 변수와 메소드 목록을 작성합니다.
3. 메소드를 만들기 위한 준비 코드를 만듭니다.
4. 메소드에 대한 테스트 코드를 만듭니다.
5. 클래스를 구현합니다.
6. 메소드를 테스트합니다.

각 클래스별로 준비 코드, 테스트 코드, 실제 코드
준비 코드 : 논리 위주의 유사코드를 표현한다. (어떻게 해야할지가 아니라 무엇을 해야할지를 기술한다.)
테스트 코드 : 실제 코드를 테스트하고 작업이 제대로 처리되는지 확인하기 위한 클래스 또는 메소드(준비 코드를 기준으로 작성한다.)
실제 코드 : 클래스를 실제로 구현한 코드

익스트림 프로그래밍 방법(XP)
조금씩, 하지만 자주 발표한다.
사이클을 반복해서 돌리면서 개발한다.
스팩에 없는 것은 절대 집어넣지 않는다.
테스트 코드를 먼저 만든다.
모든 테스트를 통과하기 전에는 어떤 것도 발표하지 않는다.
조금씩 발표하는 것을 기반으로 하여 현실적인 작업 계획을 만든다.
모든 일을 단순하게 처리한다.
두 명씩 팀을 편성하고 모든 사람이 대부분의 코드를 알 수 있도록 돌아가면서 작업한다.
효과
야근을 안한다. 항상 정규 일과 시간에만 작업을 할 수 있다.
기회가 생기는 족족 언제 어디서든 코드를 개선 할 수 있다.

for 순환문

for ( int i=0 ; i < 100 ; i++ ) { }
이 코드는 정수형 변수 i를 0으로 초기화하고 i가 100보다 작을 경우 i를 후증가연산자로 계속해서 순환하라는 뜻

int i = 0
초기화 : 변수를 선언하는 부분
i < 100
부울 테스트 : 조건 테스트가 들어가는 자리(부울값을 리턴하는 메소드가 들어가는 경우도 있다.)
i++
반복 표현식 : 순환문이 한 번 반복될때마다 실행할 내용이 들어감

for와 while의 차이점
while 순환문은 부울 테스트만 들어갈 수 있다. 초기화 및 반복 표현식을 내장 시킬 수 없다.
반복 횟수를 알 수 없을 때 어떤 조건이 만족되는 동안 계속 반복하는 경우에 유용하다.

for 순환문은 반복 횟수를 알고 있을 경우 유용하다.

++ , -- : 선/후 증가/감소 연산자
변수의 앞 뒤에서 쓰일 경우 변수 +1, -1 의 효과를 가져온다.
int x = 0 ; int z = ++x ;
int x = 0 ; int z = x++ ;

향상된 for 순환문
" String[] nameArray = { " ", " ", " " }; "
for (String name : nameArray) { }
위 코드는 nameArray에 들어 있는 각 원소에 대해서 각각의 원소를 name 변수에 저장한 다음 순환문을 실행시킨다.

String name : 선언된 변수(nameArray) 유형인 String와 반드시 동일해야 한다.
: -> in의 의미
nameArray : 반복 작업의 대상이 되는 원소들의 컬렉션

String을 int로 변환하는 방법
Integer.parseInt("3")
Integer : 자바 클래스 라이브러리에 있는 클래스로 숫자를 나타내는 String을 받아서 그 문자열을 진짜 숫자로 변환 해 주는 기능이 있는 클래스
parseInt : String을 그 문자열이 나타내는 int로 '파싱하는' 방법을 알고 있는 Integer 클래스 안에 들어있는 메소드