자바 12일차

선장원·2021년 10월 20일

자바

목록 보기
14/24

12일차 (10/19)

어제 정리를 올리고 잔다는 것을 까먹었다ㅎㅎ
빨리 해야지

객체지향 정리

객체지향 프로그래밍(Object Oriented Programming)

  • 코드를 나누자
  • 모든 사물 (객체 Object, 물건 사람, 캐릭터, 스텟 등등) 을 코드로 표현하자
  • 어떠한 객체의 구조적 틀을 클래스로 정의하고 실제 내용을 대입하고자 할 때 new를 이용하여 객체화 한다.

클래스

  • 어떠한 객체의 구조적 틀
  • 그 객체의 속성(가지고 있는 요소 또는 정보)을 표현하기 위해 필드 사용
    1) 훈련생의 속성 : 이름 나이 전화번호 전공
    2) 네이버회원의 속성 : 아이디 비밀번호 생년월일 성별 등등
  • 해당 클래스를 객체로 만들 때 어떤 형식으로 만들어야 하는지를 위해 생성자 사용
    1) 생성자는 클래스 이름과 동일
    2) 생성자를 아무것도 쓰지 않았다면
  • 특정한 기능을 수행하기 위해 메서드(method)사용
    1) 리턴 유무
  • 매개변수
    1) 생성자 또는 메서드 이름 옆 소괄호 안에 작성
    2) 모든 타입이 다 올 수 있음

연습

사칙연산(+, -, *, /)을 할 수 있는 계산기

Calculator Class

  • sum 메서드
    1) 덧셈 메서드
  • subtraction 메서드
    1) 뺄셈 메서드
  • multiplication 메서드
    1) 곱셈 메서드
  • division 메서드
    1) 나눗셈 메서드

CalculatorMain Class

  • 프로그램을 실행하면 1.덧셈 2.뺄셈 3.곱셈 4.나눗셈 선택창이 출력됨
  • 덧셈 메서드 sum 호출
    1) 더하고자 하는 숫자 2개를 매개값으로 전달함
    2) 덧셈 메서드에서 덧셈 결과를 출력하고 호출 종료
  • 뺄셈 메서드 subtraction 호출
    1) 스캐너를 통해 숫자 2개를 입력 받고 입력받은 숫자를 매개값으로 전달함
    2) 뺄셈 메서드에서 뺄셈 결과를 출력하고 호출 종료
  • 곱셈 메서드 multiplication 호출
    1) 스캐너를 통해 숫자 2개를 입력 받고 입력받은 숫자를 매개값으로 전달함
    2) 호출결과를 리턴받아서 Main에서 출력함.
  • 나눗셈 메서드 division 호출
    1) 호출하고 결과 리턴 받아서 Main에서 출력함.
    2) 나눗셈 메서드에서 스캐너로 입력 받고 계산 결과를 리턴함.
메인
		// 사칙 연산 계산기 만들기?
		Calculator c1 = new Calculator();
		Scanner sc = new Scanner(System.in);

		int start = 0; // 시작 버튼
		int num1 = 0; // 숫자 1
		int num2 = 0; // 숫자 2
		int mul = 0; // 곱셈
		double div = 0; // 나눗셈

		boolean run = true;

		while (run) {
			System.out.print("숫자 입력 : ");
			start = sc.nextInt();
			switch (start) {

			case 1: { // 덧셈
				c1.sum(12, 32);
				break;
			}

			case 2: { // 뺄셈
				System.out.print("숫자 입력1 : ");
				num1 = sc.nextInt();
				System.out.print("숫자 입력2 : ");
				num2 = sc.nextInt();
				c1.subration(num1, num2);
				break;
			}

			case 3: { // 곱셈
				System.out.print("숫자 입력1 : ");
				num1 = sc.nextInt();
				System.out.print("숫자 입력2 : ");
				num2 = sc.nextInt();
				mul = c1.multiplicaton(num1, num2);
				System.out.println(mul);
				break;
			}

			case 4: { // 나눗셈
//				System.out.print("숫자 입력1 : ");
//				num1 = sc.nextInt();
//				System.out.print("숫자 입력2 : ");
//				num2 = sc.nextInt();
				div = c1.division();
				System.out.println(div);
				break;
			}

			case 5: { // 종료
				System.out.println("종료합니다.");
				run = false;
				break;
			}

			default: {
				System.out.println("다시 선택하세요");
				break;
			}
			}

		}
클래스 객체
	Scanner sc = new Scanner(System.in);
	Calculator () { // 기본 생성자
	System.out.println("--------------------------------------------");
	System.out.println("1.덧셈 || 2.뺄셈 || 3.곱셈 || 4.나눗셈 || 5.종료");
	System.out.println("--------------------------------------------");
	}
	
	// 리턴 타입 : 없음
	// 메서드 이름 : sum
	// 매개변수 : int 2개
	void sum (int num1, int num2) { // 1
		int sum = 0;
		sum = num1 + num2;
		System.out.println(sum);
	}
	
	// 리턴 타입 : 없음
	// 메서드 이름 : subration
	// 매개변수 : int 2개
	void subration (int num1, int num2) { // 2
		int sub = 0;
		sub = num1 - num2;
		System.out.println(sub);
	}
	
	// 리턴 타입 : int
	// 메서드 이름 : multiplicaton
	// 매개변수 : int 2개
	int multiplicaton (int num1, int num2) { // 3
		int mul =0;
		mul = num1 * num2;
		
		return mul;
	}
	
	// 리턴 타입 : double
	// 메서드 이름 : division
	// 매개변수 : 없음
	double division () { // 4
		int num1 = 0;
		int num2 = 0;
		System.out.print("숫자 입력1 : ");
		num1 = sc.nextInt();
		System.out.print("숫자 입력2 : ");
		num2 = sc.nextInt();
		double div = 0;
		div = (double)(num1 / num2);
		return div;
	}

게시판 만들기

Board Class

  • 필드: 글제목, 작성자, 내용, 조회수

  • 메서드
    1) boardWrite: 글작성을 위한 메서드
    2) boardView: 글조회를 위한 메서드
    3) boardUpdate: 글수정을 위한 메서드

    BoardMain Class

  • 기본 생성자를 이용하여 객체를 만든 뒤 메서드를 호출하는 방식으로 한다.

  • boardWrite 메서드를 호출하여 새글을 작성한다. (해당 필드값 저장)
    1) 새글 작성을 위한 내용은 스캐너를 통해 입력받도록 한다.
    a. 스캐너 입력은 BoardClassMain에서 수행
    2) 출력 예시
    제목을 입력하세요:
    작성자를 입력하세요:
    내용을 입력하세요:

  • boardView 메서드를 호출하여 해당 글을 조회한다.(해당 객체의 필드 모든 값 조회)
    1) 단, 필드 모든값을 출력하기 전에 조회수를 하나 올린다.

  • boardUpdate 메서드를 호출하여 해당 글을 수정한다.
    1) 제목, 내용만 수정 가능
    2) 수정할 내용은 스캐너로 입력 받음
    3) 수정 완료 후 해당 글 전체 내용을 출력함.

메인
		// 게시판 만들기
//		Scanner sc = new Scanner(System.in); // 새끼 스위치만 쓰면 이상해 시발
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num = 0;
		Board b1 = new Board();
		
		String title = "";
		String writer = "";
		String content = "";
		boolean run = true;

		while (run) {
			System.out.print("번호를 입력하세요 : ");
			num = Integer.parseInt(br.readLine());
			switch (num) {

			case 1: { // 작성
				System.out.print("제목을 입력하세요 : ");
				title = br.readLine();
				System.out.print("작성자을 입력하세요 : ");
				writer = br.readLine();
				System.out.println("내용을 입력하세요");
				System.out.print(">");
				content = br.readLine();
				b1.boardWrite(title, writer, content);
				break;
			}
			case 2: { // 조회

				b1.boardView(); 
				break;
			}
			case 3: { //수정
				b1.boardUpdate();
				break;
			}
			case 4: {//종료
				System.out.println("종료합니다.");
				run=false;
				break;
			}
			default: {
				System.out.println("다시 입력하세요");
			}

			}

		}
		br.close();
클래스
	// 게시판 만들기
	// 필드: 글제목, 작성자, 내용, 조회수
	// 메서드 작성 조회 수정

	Scanner sc = new Scanner(System.in);

	String title = ""; // 글제목
	String writer = ""; // 작성자
	String content = ""; // 내용
	int viewnum = 0; // 조회수

	Board() {// 기본 생성자
		System.out.println("--------------------------------");
		System.out.println("1.글작성 || 2.글 조회 || 3.글 수정 ");
		System.out.println("--------------------------------");
		
	}
	
	// 리턴 : 없음
	// 메서드 이름 : boardWrite
	// 매개변수 : String 3개
	//
	
	void boardWrite(String title, String writer, String content) {
		this.title = title;
		this.writer = writer;
		this.content = content;
	}
	
	// 매개변수와 필드 이름을 다르게 해서 this 안붙이기 가능 
	// 
	void boardWrite2(String title1, String writer1, String content1) {
		title = title1;
		writer = writer1;
		content = content1;
	}
	

	// 리턴 : 없음
	// 메서드 이름 : boardView
	// 매개변수 : 없음
	void boardView() {
		System.out.println("글제목 : " + this.title);
		System.out.println("작성자 : " + this.writer);
		System.out.println("내용 : " + this.content);
		this.viewnum++;
		System.out.println("조회수 : " + this.viewnum);
	}

	// 리턴 : 없음
	// 메서드 이름 : boardUpdate
	// 매개변수 : 없음
	void boardUpdate() {
		System.out.print("제목을 입력하세요 : ");
		String title = sc.nextLine();
		System.out.print("내용을 입력하세요 : ");
		String content = sc.nextLine();
		this.title = title;
		this.content = content;
//		System.out.println("글제목 : " + this.title);
//		System.out.println("작성자 : " + this.writer);
//		System.out.println("내용 : " + this.content);
//		System.out.println("조회수 : " + this.viewnum);
		boardView(); // 메서드 안에서 다른 메서드 호출 가능 

메서드 안에서 메서드 호출 가능
void boardUpdate() {
System.out.print("제목을 입력하세요 : ");
String title = sc.nextLine();
System.out.print("내용을 입력하세요 : ");
String content = sc.nextLine();
this.title = title;
this.content = content;
System.out.println("글제목 : " + this.title);
System.out.println("작성자 : " + this.writer);
System.out.println("내용 : " + this.content);
System.out.println("조회수 : " + this.viewnum);
boardView(); // 메서드 안에서 다른 메서드 호출 가능

메서드 안에서 메서드를 사용하면 순서는 이런 순서

ArrayList

Collection Framework안의
List - ArrayList
Map - HashMap
Set - Hashset

3중에 List??

배열은 한번에 크기를 만들고 남는 공간은 낭비가 된다

하지만 arraylist는 크기가 능동적이다
데이터를 추가하면 크기가 늘어나고 지우면 줄어들고 유연하게 이루어 진다.

새로운 데이터를 넣으면 알아서 한 칸씩 뒤로 밀린다
인덱스(index)를 가지고 있다.
리스트를 선언할 때 타입을 정한다

선언

		// 선언
		// List 객체이름 : list1
		// List에 담을 수 있는 데이터 타입 : String
		// <> 데이터 타입 클래스 이름만 가능
		List<String> list1 = new ArrayList<String>();

<> 의 의미


<>사이의 데이터를 object로 변환해서 저장하고 다시 가져올 때 String으로 변환해서 가져와야 하는데 그 과정을 지워준다????

Wrapper클래스

int : Integer
long : Long
double : Double
boolean : Boolean

데이터 저장

	list1.add("첫번째 데이터");
	list1.add("두번째 데이터");
	list1.add(1, "어디에 들어갈까요");
	list1.add(1, "이건 어디에?");

출력을 하면
첫번째 데이터
이건 어디에?
어디에 들어갈까요
두번째 데이터
위 처럼 나온다. add가 사용 될 때 마다 하나 씩 뒤로 밀린다

데이터 사용(출력)

	System.out.println(list1.get(0));
	System.out.println(list1.get(1));
	System.out.println(list1.get(2));
	System.out.println(list1.get(3));
    
    

리스트 크기 확인

.size() : 크기 확인
System.out.println(list1.size());

데이터 삭제

remove(index) : index의 자리에 있는 데이터를 지우고 아래 데이터를 한 칸씩 올린다.

음 까먹고 다음날 하느라 급하게 하기도 했고 느낀점 같은 것을 적기 힘들다
ArrayList부터 이제 점점 더 심화 되어가는 느낌이다

profile
코딩도전기

0개의 댓글