[Java] OOP, Sorting, Calculator 구현

수박이삼촌·2024년 1월 19일
0

Java

목록 보기
9/21
post-thumbnail

POP(절차지향) Procedural Oriented Programming

절차 지향
: 변수 선언, logic 구현 처리(순서) 지향 -> line 50000이 한계

장점

  • 처리 속도가 빠르다.
  • sorting 처리

단점

  • (코드) 라인 수가 늘어날 때마다 한계가 온다.
  • 유지 보수가 용이하지 않다.
  • 재사용하기 어렵다.

OOP(객체지향) Object Oriented Programming

객체 지향 : 변수 선언, logic구현 -> class로 통합!

장점

  • 유지보수가 용이하다.
  • 라인 수가 늘어나도 한계가 없다.
  • 재사용하기 편리하다.

단점

  • 속도가 느리다.
package sample22_OOP;

public class MainClass {

	public static void main(String[] args) {
		/*
		 	OOP -Object Oriented Programming
		 										API - Application Programming Interface
		 										JDK - Java Development toolKit
		 	형식 : object 설계
		 	
		 	class 클래스명 {
		 		변수 선언
		 		함수(method)
		 	}
		 	
		 	object 생성(선언)
		 	클래스명 클래스변수 = new(동적할당) 클래스명();
			Scanner sc = new Scanner(System.in);
			String str = new String();
			int i;
			int array[] = new int[10];
			delete array;
			delete 클래스변수;  -> 가비지 콜렉터 
		 	
		 	클래스변수 == instance(주체) == object(객체)
		 	
		 	memory 영역
		 	stack		heap		static		system
		 	클래스변수		실제 영역
		 	올렸다 잊어버리고?
		 */
		
		// 클래스명 클래스변수 = new 클래스명();
		//		객체생성
		MyClass mycls = new MyClass();
		System.out.println(mycls);	// (heap 영역 주소)32d2fa64 4 bytes : 한 글자당 8 bit
		
		// MyClass 기본 형태
		mycls.x = 1;
		mycls.y = 2;
		mycls.name = "홍길동";
		
		mycls.method();
		
		//class Student
		Student stu = new Student();	// 클래스 변수
		stu.name = "홍길동";
		stu.english = 90;
		stu.math = 95;
		
		Student arrStu[] = new Student[3];	// 배열을 동적할당, 클래스 배열 변수
	//	Student arrStu1, arrStu2, arrStu3;
	//	아직 heap 영역에 메모리 할당이 되어 있지 않음.
		
	//	arrStu[0].language = 100; // 객체 할당이 안되어 있어 NullPointException
		
		// 객체 할당
		for (int i = 0; i < arrStu.length; i++) {
			arrStu[i] = new Student();
		}
	//	객체 배열 할당 과정 : 배열을 동적 할당 -> 각 객체 값을 동적 할당
		arrStu[0].language = 100;

	
		

	}

}

// 클래스 설계도(구축) 마이클래스 기본 형태
class MyClass{
	// (멤버) 변수ㄴ
	int x, y;
	String name;
	
	//	메소드(함수)
	void method() {
		System.out.println("MyClass method() 호출");
	}
}

// work07 학생 성적 관리 class 화
class Student{
	String name;
	int language;
	int english;
	int math;
	int history;
}

Sorting(정렬)

Input - sorting - Result

package sort;

import java.util.Scanner;

public class Sorting {

	int number[];
	int updown;
	
	public void init() {	// initionalizing
		number = null;
		updown = 0;
		
	}
	public void input() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정렬할 숫자의 갯수 = ");
		int count = sc.nextInt();
		
		number = new int[count];
		
		for (int i = 0; i < number.length; i++) {
			System.out.print( (i + 1) + " 번째 수 = ");
			number[i] = sc.nextInt();
		}
		
		System.out.print("오름(1)/내림(2) = ");
		updown = sc.nextInt();
	}
	public void sorting() {
		
		int temp;
		for (int i = 0; i < number.length -1; i++) {
			for (int j = i + 1; j < number.length; j++) {
				if(updown == 1) {
					if(number[i] > number[j]) {
						temp = number[i];
						number[i] = number[j];
						number[j] = temp;
					}
				}
				else {
					if(number[i] < number[j]) {
						temp = number[i];
						number[i] = number[j];
						number[j] = temp;
				}
			}
		}
		}
	}
		
		
	public void result() {
		for (int i = 0; i < number.length; i++) {
			System.out.print(number[i] + " ");
		}
		System.out.println();
			
		
	}
}
	

Calculator

Main Class

package sample24_calculator;

import cal.Calculator;	// module : 누군가가 만들어놓은 기능.

public class MainClass {
	public static void main(String[] args) {
		
		Calculator cal = new Calculator();
		
		cal.input();
		cal.process();
		cal.result();
		
		// 혹은 cal.loop();
	}
}

Calculator

package cal;

import java.util.Scanner;

public class Calculator {
	
	int number1, number2, result;	// 값이 초기에 0.
	String operator;	// 이미 null 되어 있음. 배열에선 초기화 해줘야 함.
	// 초기화 안해도 되는 이유 : 멤버 변수는 값이 초기화 돼있음.

	public void input() {
		Scanner sc = new Scanner(System.in);	
		
		System.out.print("첫 번째 숫자 = ");
		number1 = sc.nextInt();
		
		System.out.print("연산자(+, -, *, /) = ");
		operator = sc.next();
		
		System.out.print("두 번째 숫자 = ");
		number2 = sc.nextInt();
	}
	
	public void process() {
		
		switch(operator) {
			case "+":
				result = number1 + number2;
				break;
			case "-":
				result = number1 - number2;
				break;
			case "*":
				result = number1 * number2;
				break;
			case "/":
				result = number1 / number2;
				break;
		}
	}
	
	public void result() {
		System.out.println(number1 + " " + operator + " " + number2 + " = " + result);
	}
	
	// input, process, result를 한 곳에 묶어줄 수 있음.
	public void loop() {
		while(true) {	// 메인 함수에서 보단 Class에서 루프를 선언해주는 게 좋음.
						// 메인 함수는 코드 길이가 짧을수록 좋다.
		input();
		process();
		result();	
		// MainClass 창에서 cal.loop();만 해줘도 됨.
		}
		
	}
}

Work Calculator(완성형)

package work05;

import java.util.Scanner;

public class MainClass {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		// calculator(계산기)
		int number1, number2, result = 0;
		String operator;
		
		while(true) {
		
			// 1. 숫자입력
			number1 = numberInput("첫번째");
			//System.out.print("첫번째 숫자 >> ");
			//number1 = sc.nextInt();
			
			// 2. 연산기호(+,-,*,/)
			System.out.print("연산자(+, -, *, /) >> ");
			operator = sc.next();
			
			// 3. 숫자입력
			number2 = numberInput("두번째");
			//System.out.print("두번째 숫자 >> ");
			//number2 = sc.nextInt();
			
			// 4. 연산
			result = calculator(number1, number2, operator);
			/*
			if(operator.equals("+")) {
				result = number1 + number2;
			}
			else if(operator.equals("-")) {
				result = number1 - number2;
			}
			else if(operator.equals("*")) {
				result = number1 * number2;
			}
			else if(operator.equals("/")) {
				result = number1 / number2;
			}
			*/
					
			// 5. 결과출력
			System.out.println(number1 + " " + operator + " " + number2 + " = " + result);
			
			// 6. replay 
			System.out.print("다시 시작하시겠습니까?(y/n) = ");
			String replay = sc.next();
			
			if(replay.equals("y")) {
				System.out.println("다시 시작합니다");
			}else {
				break;
			}
		}				
	}
	
	static int numberInput(String n) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print(n + " 숫자 >> ");
		int number = sc.nextInt();
		
		return number;
	}
	
	static int calculator(int number1, int number2, String operator) {
		int result = 0;
		
		if(operator.equals("+")) {
			result = number1 + number2;
		}
		else if(operator.equals("-")) {
			result = number1 - number2;
		}
		else if(operator.equals("*")) {
			result = number1 * number2;
		}
		else if(operator.equals("/")) {
			result = number1 / number2;
		}
		
		return result;
	}
	
	
}

접근지정자

class 종류 :

은닉성 상속성 다형성

private protected public

그 중 은닉성

My Class

package my;

public class MyClass {
	/*
	 	uncpasulation == 은닉성, 캡슐화
	 	외부 접근 제어(차단, 읽기 전용)
	 	
	 	접근지정자
	 	private		: 개인적인	// 내부에 있는 함수에서만 사용 가능
	 	public		: 대중적인(누구나)
	 	protected	: 상속에 관련	// 많이 안 씀.
	 	
	 */
	// 멤버변수 90%이상 -> private
	private int number;
	public	String name;
	protected double height;

	// 메소드 90% 이상 -> public
	public void setNumber(int num) {
		number = num;
	}
	public int getNumber() {
		return number;
	}

Main Class

package sample25_myclass;

import my.MyClass;

public class MainClass {
	
	public static void main(String[] args) {
	//	공개범위		
		
		MyClass mycls = new MyClass();
		
		// mycls.number = 1; // private이므로 외부 접근 불가.
		mycls.name = "홍길동";	// public이므로 외부 접근 가능.
		// mycls.height = 174.1; // protected도 외부 접근 불가.
		
		mycls.setNumber(123);	// private int number; <= 123
		// method로 private 값을 세팅할 수 있다. 
		
		int number = mycls.getNumber();
		System.out.println("number = " + number);
	}

}

Human Class

package human;

public class Human {

		private String name;
		private int age;
		private double height;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public double getHeight() {
			return height;
		}
		public void setHeight(double height) {
			this.height = height;
		}
		
		
}

오늘의 과제

1번


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

Student s = new Student();
​ s.name = "홍길동";
​ s.ban = 1;
​ s.no = 1;
​ s.kor = 100;
​ s.eng = 60;
​ s.math = 76;
System.out.println("이름:"+s.name);
System.out.println("총점:"+s.getTotal(s.kor, s.eng, s.math) );
System.out.println("평균:"+s.getAverage( ) ); }
}

class Student {

\*

(1) 알맞은 코드를 넣어 완성하시오.

*/

}

[실행결과]

이름:홍길동

총점:236

평균:78.7

profile
Today I Learned

0개의 댓글