휴먼교육센터 개발자과정 32일차

조하영·2022년 9월 16일
0

코드를 작성하면 그 소스코드는 실행중이 아니다.
작성된 코드를 실행하려면 ctrl+f11로 코드를 실행해야 한다.
코드를 실행하는 것을 스레드라고 하며 이 스레드가 포문을 해석하고
조건을 해석하고 리턴값을 반환하는 등 명령문을 실제 해석하고 실행.

코드와 스레드를 구분해서 생각.

개발자는 직접 자료형을 만들수 있다.
이때 자료형은 클래스로 만들고 전역변수와 메서드로 정의한다.
이것을 자바에서는 참조타입으로 분류한다.

메서드를 정의하는 형식
public int aa (String id){
접근제어자 리턴타입 메서드명(매개변수)
return 1; //리턴값 리턴타입은 리턴값의 자료형을 의미
}
리턴이란 메서드가 종료되면서 호출부로 넘겨주는 값을 의미

실습
프로젝트 생성
1. 패키지 생성
2. 메인 메서드가 있는 메인클래스를 생성
3. 아래와 같은 자료형을 클래스로 설계
물건을 정의한 자료형
물건은 물건의 아이디가 있고 수량(기본값 10)이 있고 단가가 있다.
물건값을 입력하는 메서드가 있다.
물건의 수량을 리턴해주는 메서드가 있다.
물건의 정보(아이디, 수량, 단가)를 보여주는 메서드가 있다.
4. 메인 메서드에서 아래와 같이 테스트
물건의 클래스로부터 객체를 만들고 이를 참조하는 참조변수를 선언
물건의 정보를 보여준다.
물건의 수량을 확인한다.
물건의 가격을 1000으로 입력한다.
물건의 정보를 보여준다.

심화
5. 물건을 정의한 자료형에 다음 기능을 추가
물건의 아이디와 수량과 단가를 저장하시오(단, 메서드는 한개만 정의)

package Test;

public class Main {

  public static void main(String[] args) {
      // TODO Auto-generated method stub
      Product p = new Product();
      p.proShow();
      System.out.println("수량: "+p.proCnt());
      p.priceInput(1000);
      p.proShow();
      p.proInput("aaaa", 20, 2000);
      p.proShow();

  }

  }


package Test;

public class Product {
String id;
int cnt=10;
int price;

  public void priceInput(int a) {
      price=a;
  }

  public int proCnt() {
      return cnt;
  }

  public void proShow() {
      System.out.println("아이디: "+id+", 수량: "+cnt+", 가격: "+price);
  }

  public void proInput(String b, int c, int d) {
      id=b;
      cnt=c;
      price=d;
  }

}

실습2
1. 시작메서드가 있는 클래스를 만든다.
2. car라는 클래스를 만든다
3. 자동차는 이름이 있고 주유타입(경유, 가솔린, Lpg 등), 년식, 색상이 있다.
4. 자동차의 기능은
객체를 참조하여 넘겨받은 이름을 객체에 저장하는 기능
객체를 참조하여 넘겨받은 주유타입을 저장하는 기능
객체를 참조하여 넘겨받은 년식과 색상을 저장하는 기능
객체를 참조하면 주유타입을 리턴하는 기능
객체의 전역변수의 내용을 모두 보여주는 기능

  1. 메인 메서드에서 테스트
    자동차 객체를 만들고 참조변수를 선언
    자동차의 정보를 본다.
    자동차의 이름을 입력
    자동차의 정보를 본다
    자동차의 주유타입을 입력
    자동차의 년식과 색상을 입력
    자동차의 정보를 본다
    자동차의 주유타입을 리턴받아 출력

심화
6. 객체를 참조할때 숫자 10을 저장하면 현재 키로수에서 10을 더한 값을 리턴받는다
7. 객체를 참조할때 색상을 입력하여 현재 객체에 저장된 색상과 일치하면 숫자 1을
불일치하면 숫자 -1을 리턴한다.
8. 객체를 참조하여 넘겨받은 주유타입을 저장하는 기능을 수정
넘겨받은 주유타입을 저장할때 저장가능한 주유타입만 저장가능하게
저장이 성공하면 true 리턴
실패하면 false를 리턴
가능한 주유타입: 경유, 가솔린,LPG, 하이브리드, 전기, 수소

package Test;

public class Main {

  public static void main(String[] args) {
      // TODO Auto-generated method stub
      Car c = new Car();
      c.carPrt();
      c.inName("K5");
      c.carPrt();
      c.inFuel("가솔린");
      c.inYearColor(2020, "black");
      c.carPrt();
      System.out.println(c.chkFuel());
      System.out.println(c.chkMileage(20));
      System.out.println(c.chkColor("black"));
      System.out.println(c.inFuel("수소"));
      c.carPrt();
  }

}

package Test;

public class Car {
  String name;
  String fuel;
  int year;
  String color;
  int mileage;

  public void inName(String n) {
      name = n;
  }

  public boolean inFuel(String f) {
      if (f.equals("경유") || f.equals("가솔린") || f.equals("LPG") || 
              f.equals("하이브리드") || f.equals("전기")|| f.equals("수소")) {
          fuel = f;
          return true;
      }
      return false;
  }

  public void inYearColor(int y, String c) {
      year = y;
      color = c;
  }

  public String chkFuel() {
      return fuel;
  }

  public void carPrt() {
      System.out.println("자동차명:" + name + ", 주유타입:" + fuel + ", 년식:" + year + ", 색상:" + color);
      ;
  }

  public int chkMileage(int m) {
      return mileage + m;
  }

  public int chkColor(String C) {
      if (C.equals(color)) {
          return 1;
      }
      return -1;
  }
}

마지막 실습

final 실습
게시글 만들기
1. 프로젝트와 패키지생성
2. 메인클래스 생성
3. bbs라는 클래스 생성
글제목, 글번호, 글내용, 조회수
글제목, 글번호, 글내용을 저장하는 메서드1개
조회수를 증가시키는 메서드 1개
글제목을 리턴하는 메서드 1개
글번호를 리턴하는 메서드 1개
글 내용을 리턴하는 메서드 1개
조회수를 리턴하는 메서드 1개
글객체 생성
메서드가 정상동작 하는지 테스트 코드
upgrade
기능추가
문자를 매개변수로 받으면 해당하는 문자가
제목에 포함되는지 확인
제목에 있으면 제목을 리턴, 없으면 null리턴

조건 String객체에서 제공하는 contains메서드 활용
http://www.dreamy.pe.kr/zbxe/CodeClip/3766960

기능추가
글제목을 저장할 때
String[] badword = {"개나리","십장생"};
badword에 지정된 단어가 포함되면 0을 리턴하고
글번호와 글내용도 저장하면 안된다.
포함되지 않으면 1을 리턴하고 글번호와 글내용이 저장된다.

조건 String 객체에서 제공하는 indexOf메서드 활용

기능추가
단어찾기 메서드를 하나 추가한다
단어를 매개변수로 받으면 내용에서 그 단어가 몇번 나오는지 리턴한다.

package Test;

public class Main {

public static void main(String[] args) {
	
	Bbs bbs = new Bbs();

	bbs.input("1Q84", 1, "무라카미 하루키 대표작");
	bbs.cntPlus();

	String title = bbs.reTitle();
	int no = bbs.reNo();
	String text = bbs.reText();
	int cnt = bbs.reCnt();
	System.out.println("제목: " + title);
	System.out.println("글번호: " + no);
	System.out.println("내용: " + text);
	System.out.println("조회수: " + cnt);
	String chkTitle = bbs.chkTitle("1Q");
	System.out.println(chkTitle);
	int chkText= bbs.chkText("하루");
	System.out.println(chkText);

}

}

package Test;

public class Bbs {
	String title = null;
	int no = 0;
	String text = null;
	int cnt = 0;
	String[] badWord = { "개나리", "십장생" };

public int input(String ti, int n, String te) {
	int cnt = 0;
	for (int i = 0; i < badWord.length; i++) {

		for (int j = 0; j < ti.length(); j++) {
			if (badWord[i].indexOf(ti.charAt(j)) != -1) {
				cnt++;
			}
		}
	}
	if (cnt < 3) {
		title = ti;
		no = n;
		text = te;
		return 1;
	}

	return 0;
}

public void cntPlus() {
	cnt++;
}

public String reTitle() {
	return title;
}

public int reNo() {
	return no;
}

public String reText() {
	return text;
}

public int reCnt() {
	return cnt;
}

public String chkTitle(String t) {
	if (title.contains(t)) {
		return title;
	}
	return null;
}

public int chkText(String chk) {

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

		if (a.indexOf(chk) != -1) {
			a = a.substring(a.indexOf(chk) + 1);
			cnt2++;
			i--;
		}
	}
	return cnt2;

}

}

profile
공부하는 개발자

0개의 댓글