클래스(class)
클래스는 객체를 정의하는 설계도입니다.
클래스란? 현실 세상에 존재하는 대부분의 것들은 클래스로 표현할 수 있습니다.

객체
객체란 클래스(설계도)를 통해 현실 세계에 뿌리내릴 수 있는 것을 말합니다.
아직 현실 세계에 존재 하지는 않지만 존재할 가능성이 있는 것을 객체라고 합니다.

사자 클래스를 정의하였습니다. 사자는 이 세계에 존재할 수 있는 객체(Object)입니다.

하지만 동물 클래스를 설계하고 이 세계에 뿌리내리게 하는 것은 불가능합니다. 왜냐하면 동물은 이 세계에 존재할 수 없는 것이기 때문입니다. 동물은 사자, 호랑이, 기린 같은 것들을 어우를 수 있는 포괄적인 개념입니다. 이런 것들은 실제 세상에 존재할 수 없기 때문에 객체가 될 수 없습니다. 동물 클래스는 추상적인 것입니다.
프로그래밍 세상에서 객체란 메모리(프로그래밍 세상)에 로드할 수 있는 것을 말하며 객체가 될 수 없다는 것은 메모리(프로그래밍 세상)에 로드할 수 없다는 뜻입니다.
객체 지향적 프로그래밍 설계란?
● 이름을 바로 잡는 일이다. 곧 대상 사물의 의미를 정확히 나타낼 수 있는 바른 이름(정명론)
"임금은 임금답고 신하는 신하답고 아버지는 아버지답고 자식은 자식답게[군군신신 부부자자] 되는 것입니다."
"학생은 학생 다워야 한다. "
▶ 합당한 이름을 붙이고 그 취지에 맞게 상태(변수)와 행위(메서드)를 정의하여 만들고 다른 객체들과 협력하거나 상호 작용하게 코드를 설계한다.

클래스 설계
student 클래스
// 클래스를 설계 할 때 이름을 잘 짓는 것이 중요하다.
// Student class 설계 도면
public class Student {
// 속성
int age;
double weight;
// 문자열이라는 데이터 타입이다.
String name = "안녕";
//기능
Warrior 클래스
public class Warrior {
//속성(상태) - 멤버 변수
int damage; // 공격력
String name;
String color;
double height;
//기능 ....
객체 생성
(클래스 안에 있는 속성 사용)
student 클래스 사용
//코드의 시작점
public static void main(String[] args) {
Student kim;
Student hong; //변수의 선언
hong = new Student(); // 변수의 초기화
hong.age =10; // .연산자는 객체 안으로 들어간다
//화면에 hong age 값을 출력 하시오
System.out.println(hong.age);
}
Warrior 클래스 사용
public class MainTest2 {
// 메인 함수
public static void main(String[] args) {
//메인 함수 안에 선언하는 변수는 -- 지역 변수
Warrior w1; // 변수의 선언 --> 참조 타입
// new 키워드를 만나면 메모리에 올려 준다
// 메모리에 올라가면 프로그램 세상에 존재 하게 된다.
w1 = new Warrior();
w1.name = "작은 오크";
w1.color = "초록색";
w1.height = 50;
w1.damage = 100;
Warrior w2;
w2 = new Warrior();
w2.name = "큰 오크";
w2.color = "파란색";
w2.height = 200;
w2.damage = 500;
}
}
함수란 (function)
● 하나의 기능을 수행하는 일련의 코드
● 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨
● 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음
함수 정의하기
● 함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성됨
int add(int num1, int num2) {
int add(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
함수 호출과 스택 메모리
● 스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리
● 함수의 수행이 끝나면 자동으로 반환 되는 메모리

함수 예제 (덧셈과 뺄셈)
// 함수란
// 두개의 매개 변수를 받아서 덧셈하는 기능을 만들기
// 함수를 선언하는 문법
public static int addNumber(int n1, int n2) {
// 결과를 담을 변수를 선언
int result;
result = n1 + n2;
return result;
}
public static double minusNumber(int n1, int n2) {
double result;
result = n1 - n2;
return result;
}
public static void main(String[] args) {
System.out.println("결과");
int returnValue = addNumber(10, 5); // 함수를 호출 하는 문법
System.out.println(returnValue);
int returnValue2 = addNumber(100, 7895);
System.out.println(returnValue2);
//함수 호출은 모양 맞추기다 이다
double returnValue3 = minusNumber(5, 100);
System.out.println(returnValue3);
}
결과
15
7995
-95.0
함수 예제 2
// 메인 함수
public static void main(String[] args) {
sayHello("안녕 좋은 아침이야");
sayHello("반가워");
int result = calcSum();
System.out.println(result);
}// end of main
// 함수에는 여러가지 종류가 있다. - 정수값을 반환하는 함수
public static int add(int n1, int n2, int n3) {
// 함수 안에 사용하는 변수는 - 지역 변수라고 한다.
// return 키워드 뒤에 바로 식을 사용할 수도 있다.
return n1 - n2 - n3;
}
// 아무것도 반환 하지 않는 함수도 있다
// void -> 텅 빈
public static void sayHello(String greeting) {
System.out.println(" ** " + greeting + "** ^^");
}
// 매개 변수는 반드시 없어도 된다
public static int calcSum() {
int sum = 0, i = 1;
for(i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
결과
** 안녕 좋은 아침이야** ^^
** 반가워** ^^
5050
함수 인자 3 개사칙연산
public static void main(String[] args) {
System.out.println("결과");
// 함수를 호출해서 실행 하시오
int a = add(3, 3, 3);
int m = minus(3, 3, 3);
int m2 = multiply(3, 3, 3);
int d = division(3, 3, 3);
System.out.println(a);
System.out.println(m);
System.out.println(m2);
System.out.println(d);
}// end of main
// 덧셈 뺄셈 곱셈 나눗셈
// 더하기
public static int add(int a, int b, int c) {
int result = a + b + c;
return result;
}
// 빼기
public static int minus(int a, int b, int c) {
int result = a - b - c;
return result;
}
// 곱셈
public static int multiply(int a, int b, int c) {
int result = a * b * c;
return result;
}
// 나눗셈
public static int division(int a, int b, int c) {
int result = a / b / c;
return result;
}
결과
9
-3
27
0
class 와 객체의 의미를 이해하자
class - 객체를 만들기 전에 속성(상태)와 기능을 설계하는 도면
객체 : 실제 메모리에 올라간 녀석(프로그램 세상에 존재하게 됨)
객체를 설계할 때 클래스 안에 정의하는 변수는 : 멤버 변수
main 함수에서 사용하는 변수는 : 지역 변수
자료형(기본 데이터 타입) 변수는 스택(stack)에 할당
참조 타입 변수는 힙(heap) 에 할당
함수와 메서드의 차이점
메서드는 멤버 변수를 활용해서 그 객체의 이름에 맞는 기능을 정의
함수는 하나의 기능을 수행하는 일련의 코드 묶음이다.
함수
학생
public class Student {
// 멤버 변수 파란색 지역변수 노란색
int studentId; // 기본 데이터 타입
String studentName; // 참조 타입
String address;
double weight;
// 기능 정의
// 메모리 영역이 다른곳에 잡힘 static void
public void study() {
System.out.println(studentName + "이(가) 공부를 합니다");
}
public void breakTime() {
System.out.println(studentName + "이(가) 휴식을 합니다");
}
public void showInfo() {
System.out.println("====== 상태창 ========");
System.out.println(studentName + "의 ID : " + studentId);
System.out.println(studentName + "의 name : " + studentName);
System.out.println(studentName + "의 주소 : " + address);
System.out.println(studentName + "의 몸무게 : " + weight);
System.out.println("====================");
}
// 함수와 메서드의 차이점
// 메서드는 멤버 변수를 활용해서 그 객체의 이름에 맞는 기능을 정의
// 함수는 하나의 기능을 수행하는 일련의 코드 묶음이다.
}
학생
public class StudentMainTest1 {
public static void main(String[] args) {
Student studentKim = new Student();
studentKim.studentId = 1;
studentKim.studentName = "티모";
studentKim.address = "블루진영";
studentKim.study();
studentKim.breakTime(); // 끝에 괄호가 있으면 함수
studentKim.showInfo();
Student studentLee = new Student();
studentLee.studentId = 2;
studentLee.studentName = "야스오";
studentLee.address = "레드진영";
studentLee.showInfo();
// 멤버 변수는 값을 초기화 하지 않으면 기본 값으로
// 컴파일러가 값을 넣어서 만들어 준다.
}
}
결과
티모이(가) 공부를 합니다
티모이(가) 휴식을 합니다
====== 상태창 ========
티모의 ID : 1
티모의 name : 티모
티모의 주소 : 블루진영
티모의 몸무게 : 0.0
====================
====== 상태창 ========
야스오의 ID : 2
야스오의 name : 야스오
야스오의 주소 : 레드진영
야스오의 몸무게 : 0.0
====================
버스 요금 계산기
public class Bus {
// 속성
int busNumber;
int count; // 승객수
int money; // 수익금
// 기능
public void take(int m) {
// 0 = 0 + 1300; ... 1300
// 1300 = 1300 + 1300 ... 2600
money += m;
count ++;
}
public void showInfo() {
System.out.println("====== 상태창 =======");
System.out.println("버스 번호 : " + busNumber);
System.out.println("승객 수 : " + count);
System.out.println("현재 수익금 : " + money);
}
}
버스
public class busMainTest {
public static void main(String[] args) {
Bus bus100 = new Bus();
Bus bus200 = new Bus();
//System.out.println(bus100);
bus200.busNumber = 200;
for(int i =1; i <= 100; i++) {
bus200.take(1300); // 2 사람
}
//bus200.take(1300); // 1 사람
bus200.showInfo();
//오류노트 작성
}
}
결과
====== 상태창 =======
버스 번호 : 200
승객 수 : 100
현재 수익금 : 130000
주급 계산기
출근 시간, 퇴근 시간, 일한 시간을 이용하여 주 15시간 넘게 근무했으면 주휴수당을 주는 프로그램을 만들어보자
(여기서 주휴수당은 20프로)
public class workHard {
// 알바생
// 출근
// 퇴근
// 일당
String name;
int c, t, s;
double m;
int sum;
public void in() {
System.out.println(name + " 출근");
}
public void out() {
System.out.println(name + " 퇴근");
}
public void money(){
System.out.println("이번 주 주급은 : " + sum + "원");
}
}
주휴수당 계산기
import java.util.Scanner;
public class workHardTest {
public static void main(String[] args) {
workHard alba = new workHard();
String d;
int sum = 0, total = 0;
for(int i=1; i < 8; i++) {
if (i == 1) {
d = "월요일";
}
else if (i==2) {
d= "화요일";
}
else if (i==3) {
d= "수요일";
}
else if (i==4) {
d= "목요일";
}
else if (i==5) {
d= "금요일";
}
else if (i==6) {
d= "토요일";
}
else {
d= "일요일";
}
alba.name = "알바생";
alba.in();
System.out.print( d + " 출근 시간 : ");
Scanner sc = new Scanner(System.in);
alba.c = sc.nextInt();
System.out.print( d + " 퇴근 시간 : ");
alba.t = sc.nextInt();
alba.out();
alba.s = alba.t - alba.c; //일한 시간
total += alba.s;
System.out.println("오늘 일한 시간은 : " + alba.s);
System.out.println("총 일한 시간은 : " + total);
//m = (t - c) * 9620;
alba.m = (alba.t-alba.c) * 9620; // 일당
alba.sum += alba.m;
}
//alba.c = 9;
//alba.t = 24;
//alba.sum += sum;
if(total>=15) {
System.out.println("주 15시간 넘게 근무하셔서 주휴수당을 받을 수 있습니다");
alba.sum *= 1.2; // 주휴수당
}else {
System.out.println("주휴수당을 못 받습니다");
alba.sum *= 1;
}
alba.money();
}
}
결과
월요일 ~ 일요일 출근시간을 0 퇴근시간을 5로 입력한 경우
알바생 출근
월요일 출근 시간 : 0
월요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 5
알바생 출근
화요일 출근 시간 : 0
화요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 10
알바생 출근
수요일 출근 시간 : 0
수요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 15
알바생 출근
목요일 출근 시간 : 0
목요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 20
알바생 출근
금요일 출근 시간 : 0
금요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 25
알바생 출근
토요일 출근 시간 : 0
토요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 30
알바생 출근
일요일 출근 시간 : 0
일요일 퇴근 시간 : 5
알바생 퇴근
오늘 일한 시간은 : 5
총 일한 시간은 : 35
주 15시간 넘게 근무하셔서 주휴수당을 받을 수 있습니다
이번 주 주급은 : 404040원
오늘의 퀴즈
1번
보기 중 고르시오
보기 1. 지역변수 2. 멤버변수
1-1 객체를 설계할 때 클래스 안에 정의하는 변수는?
1-2 main 함수에서 사용하는 변수는
정답
1-1 : 2
2-1 : 1
2번
다음 중 객체가 아닌 것은?(여러개 가능)
보기
1. 가구 2. 동물 3. 호랑이 4. 의자
정답
1, 2
3번
3-1 자료형(기본 데이터 타입) 변수는 ( )에 할당
3-2 참조 타입 변수는 ( ) 에 할당
보기
1. 스택 2. 힙
정답
3-1 : 1
3-2 : 2
주의할 점
● 클래스는 대문자로 시작하는것이 좋음
● java 파일 하나에 클래스는 여러 개가 있을 수 있지만, public 클래스는 하나이고, public 클래스와 .java 파일의 이름은 동일함
● camel 표기법 첫단어의 시작만 소문자로 시작하고 나머지 단어의 시작은 대문자로 ex) goodMan
● 클래스 하나만 생성해도 여러곳에서 호출해서 사용가능
● 참조 타입은 String은 첫글자 대문자
● char 는 ' ' String은 " "
'JAVA' 카테고리의 다른 글
[JAVA] 접근 제어 지시자 (0) | 2023.08.01 |
---|---|
[JAVA] 생성자를 사용하여 클래스 설계하여 객체 생성 (0) | 2023.07.31 |
[JAVA] 반복문 (for, while, do-while, break, continue)과 랜덤(룰렛) (0) | 2023.07.27 |
[JAVA] 연산자(산술, 복합 대입, 증감, 감소, 조건, 논리 관계)와 조건문(if,if else, if else if), Scanner 사용법 (0) | 2023.07.26 |
[JAVA] 단축키 모음 (0) | 2023.07.25 |