절차 지향
: 변수 선언, logic 구현 처리(순서) 지향 -> line 50000이 한계
객체 지향 : 변수 선언, 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;
}
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();
}
}
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();
}
}
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();만 해줘도 됨.
}
}
}
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
그 중 은닉성
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;
}
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);
}
}
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;
}
}
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