[Java] 노트정리 : 객체지향 Class

Young eee·2022년 12월 27일

Java

목록 보기
14/22
post-thumbnail

📖 객체지향(OOP)

  • 객체지향은 각각의 처리들을 준비해두고 필요한 부분을 사용
  • 유지보수가 용이하고 (코드)라인수가 늘어나도 상관 X
  • 클래스 변수 == instance(주체) == object(객체)

※ 절차지향 (POP) : 처리속도가 빠르다는 장점이 있으나 (코드)라인수가 늘어 날 때마다 한계가 오고 유지보수가 용이하지 않음

💻 class Ex.

public static void main(String[] args) {
/*
	형식 : object 설계
			
	class 클래스명 {
		변수선언
		함수(method)
	}
			
	object 생성(선언)
	클래스명 클래스변수 = new 클래스명();
*/
    MyClass mycls = new MyClass();
    
    mycls.x = 1;
    mycls.y = 2;
    mycls.name = "홍길동";

    mycls.method();

    Student stu = new Student();
    stu.name = "홍길동";
    stu.language = 100;
    stu.english = 90;
    stu.math = 95;

    //객체 배열
    Student arrStu[] = new Student[3];	 //배열을 동적할당
    //클래스를 동적할당 해준 뒤 사용해야 함
    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() 호출");
	}
}

class Student {
	String name;
	int language;
	int english;
	int math;
}

📌 Sorting 객체화 Ex.

  • MainClass (MainClass는 최대한 깔끔하게 작성)
package object;

import sort.Sorting;

public class MainClass {

	public static void main(String[] args) {
		Sorting sort = new Sorting();
		
		sort.init();
		sort.input();
		sort.sorting();
		sort.result();

	}

}
  • Sorting Class
package sort;

import java.util.Iterator;
import java.util.Scanner;

public class Sorting {
	int number[];
	int updown;
	
	public void init() {
		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 객체화 Ex.

  • MainClass
package work08;

import calculator.calculator;

public class MainClass {

	public static void main(String[] args) {
		calculator cal = new calculator();
		
		cal.input();
		cal.cal();
		cal.result();
		cal.replay();

	}

}
  • calculator class
package calculator;

import java.util.Scanner;

public class calculator {
	Scanner sc = new Scanner(System.in);
	
	int number1, number2, result;
	String operator;
	
	public void input() {
		
		System.out.print("첫 번째 숫자 입력 >> ");
		number1 = sc.nextInt();
		
		System.out.print("+, -, *, / 중 하나를 입력 >>");
		operator = sc.next();
		
		System.out.print("두 번째 숫자 입력 >> ");
		number2 = sc.nextInt();
	
	}
	
	public void cal() {
		if (operator.equals("+") == true) {
			result = number1 + number2;
		}else if (operator.equals("-") == true) {
			result = number1 - number2;
		}else if (operator.equals("*") == true) {
			result = number1 * number2;
		}else if (operator.equals("/") == true) {
			result = number1 / number2;
		}
	}
	
	public void result() {
		System.out.println(number1 + operator + number2 + " = " + result);
	}
	
	public void replay() {
		while(true) {
			System.out.print("다시 계산하시겠습니까? (y/n) = ");
			String replay = sc.next();
			if(replay.equals("y")) {
				System.out.println("다시 시작합니다");
				input();
				cal();
				result();
			}else {
				break;
			}

		}
	}
}

💡 Class의 은닉성(캡슐화) == Encapsulation

  • 외부접근을 제어하기 위함(차단, 읽기전용)
접근지정자참고
private개인적인
public대중적인
protected상속에 관련거의 사용x

💻 Encapsulation Ex.

  • MainClass
package sample25;

import my.MyClass;

public class MainClass {

	public static void main(String[] args) {
		
		MyClass mycls = new MyClass();
		
		// mycls.number = 1; 바로 호출되지 않음
		mycls.name = "홍길동";
		// mycls.height = 174.1; 바로 호출되지 않음
		
		mycls.setNumber(123);	//private int number -> 123
		
		int number = mycls.getNumber();
		System.out.println("number = " + number);
	}

}
  • Myclass
// 멤버변수 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;
	}

💻 Getter, Setter Ex.

  • 은닉성으로 인해 Getter와 Setter를 이용해서 값을 주고 받을 수 있음
    자주 사용하는 것으로 메뉴 //Source -> Generate Getters and Setters... 로 바로 설정가능함
package human;

public class Human {
	private String name;
	private int age;
	private double height;
	
	//Source -> Generate Getters and Setters...
	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;
	}
	
	
	
}

0개의 댓글