클래스
. 자바프로그래밍의 단위 - 설계도의 클래스 / 실행 클래스도 있다.
. 객체지향프로그램의 특징 - 캡슐화, 다형성, 상속의 특징을 갖는다.
. java파일에 여러개의 클래스가 존재할때는 public은 하나여야 한다. 하지만 컴파일하면 .class는 개별적으로 생성된다.
. 구성요소
- 필드 : 속성을 구현, 전역변수와 같이 메소드간 공유
- 생성자 : 클래스 이름과 같다. 초기화 역할, void/return이 없다. 기본 생성자는 생략되어도 JVM이 넣어준다.
오버로딩 - 같은 이름의 생성자나 메소드가 존재할때 매개변수의 타입, 수, 순위를 보고 알아서 호출된다.
- 메소드 : 기능을 구현
. 변수의 종류
- 멤버변수 : 필드의 일반변수. static 안붙음
- 클래스변수 : static이 붙은 변수
클래스가 실행되면 가장 먼저 메모리에 올라온다.(객체가 생성되기 전에 올라옴)
객체간에 공유된다.
변수, 메소드에 사용된다.
- 매개변수 : 생성자나 메소드안에 있는 변수(매개변수, 매개변수)
- 인스턴스 변수: Student s = new Student()
* 전역변수/지역변수 - 전역변수의 역할 필드(멤버변수)가 하고, 지역변수는 메소드안에서 선언한 것을 말한다.
* for문, if문은 메소드안에서 기능을 구현할때 사용되어야 한다.
객체배열
; 배열안에 객체를 넣어 활용하는 것.
- 구성 : 배열, 객체들도 필요하다.
1) 배열을 생성한다. - 무엇을 담을 것인가? 클래스 [] arr = new 클래스[10];
2) 객체를 만든다. - Student(클래스) 객체변수1 = new Student(); --> name, tel, 공부하기()
- Student(클래스) 객체변수2 = new Student();
arr ----------> [객체변수1][객체변수2][ ][ ][ ][ ][ ][ ][ ][ ]
|
arr[0].name
arr[0].tel
arr[0].공부하기()
class Student{
String name;
String tel;
int age;
Student(String name, String tel, int age){
this.name = name;
this.tel = tel;
this.age = age;
}
String getName() {
return name;
}
String getTel() {
return tel;
}
int getAge() {
return age;
}
}
public class Class14 {
public static void main(String[] args) {
Student[] arr = new Student[3]; // [] [] []
arr[0] = new Student("서대길","010",23);
arr[1] = new Student("김건부","020",22);
arr[2] = new Student("장하권","030",24);
/*
* Student st1 = new Student("서대길","010",23); Student st2 = new
* Student("김건부","020",22); Student st3 = new Student("장하권","030",24);
*
* arr[0] =st1; arr[1]=st2; arr[3]=st3; }
*/
for(int i=0; i<arr.length; i++) {
String name = arr[i].name;
String tel = arr[i].tel;
int age = arr[i].age;
System.out.println(name+"선수의 전화번호는 "+tel+"이고, 나이는 "+age+"입니다.");
}
}
}
package classstudy;
import java.util.Scanner;
class Products {
String name;
int price;
int stock;
int sold;
Products(String name, int price, int stock, int sold){
this.name = name;
this.price = price;
this.stock = stock;
this.sold = sold;
}
//가격 가져오기
//재고량 가져오기
//판매량 가져오기
String getName() {
return name;
}
int getPrice() {
return price;
}
int getStock() {
return stock;
}
int getSold() {
return sold;
}
}
//스캐너로 받아서 객체를 생성한다.
//Products를 담는 배열 3개를 준비한다.
//배열에 Products객체를 담는다.
//반복문을 활용해서 모두 출력해본다.
public class Class15 {
public static void main(String[] args) {
Products[] p = new Products[3];
System.out.println("제품명,가격,재고량,판매량을 차례로 기입해주세요");
Scanner sc = new Scanner(System.in);
//객체저장
for(int i=0; i<p.length; i++){
String name = sc.next();
int price = sc.nextInt();
int stock = sc.nextInt();
int sold = sc.nextInt();
p[i]=new Products(name, price, stock, sold);
System.out.println((i+1)+"번째 제품을 등록했습니다");
sc.close();
}
}
Class16_Manager
package classstudy;
public class Class16_Manager {
String name;
int age;
String part;
void setName(String name) {
this.name=name;
}
int getAge(int age) {
return age;
}
void setAge(int age) {
this.age=age;
}
String part() {
return part;
}
void setPart(String part) {
this.part=part;
}
void printMg() {
System.out.println("이름: "+name);
System.out.println("나이: "+age);
System.out.println("부서: "+part);
}
}
Class16_Student
package classstudy;
public class Class16_Student {
String name;
int age;
String ban;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this.age = age;
}
String getBan() {
return ban;
}
void setBan(String ban) {
this.ban = ban;
}
void printSt() {
System.out.println("이름: "+name);
System.out.println("나이: "+age);
System.out.println("반: "+ban);
System.out.println("================");
}
}
Class16_Teacher
package classstudy;
public class Class16_Teacher {
String name;
int age;
String subject;
//앞에서 Student와 동일하게 get~, set~ 메서드를 작성하고, printT()로 내역출력 구현
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this.age=age;
}
String getSubject() {
return subject;
}
void setSubject(String subject) {
this.subject = subject;
}
void printT() {
System.out.println("이름: "+name);
System.out.println("나이: "+age);
System.out.println("담당과목: "+subject);
System.out.println("=====================");
}
}
Class16_Ex
package classstudy;
public class Class16Ex {
public static void main(String[] args) {
Class16_Student st1 = new Class16_Student();
//메소드를 활용해서 초기화
st1.setName("수지");
st1.setAge(21);
st1.setBan("클래스");
//메소드를 활용해서 읽어오기
System.out.println("학생이름: "+st1.getName());
//선생님
Class16_Teacher th1 = new Class16_Teacher();
th1.setName("서대길");
th1.setAge(35);
th1.setSubject("JAVA");
//관리자
Class16_Manager mg1 = new Class16_Manager();
mg1.setName("김건부");
mg1.setAge(22);
mg1.setPart("연습실 청소");
st1.printSt();
th1.printT();
mg1.printMg();
}
}
Account
package classstudy;
public class Account {
String accountNo, ownerName;
int balance;
public Account(String accountNo,String ownerName, int balance) {
this.accountNo = accountNo;
this.ownerName = ownerName;
this.balance = balance;
}
//예금
void deposit(int amt) {
balance += amt;
}
//출금
void withdraw(int amt) {
balance -= amt;
}
void widthdraw() {
balance -= 1000;
}
//조회
int balance() {
return balance;
}
}
계좌
package classstudy;
public class Class17 {
public static void main(String[] args) {
//계좌를 생성하고 입출금 및 잔액조회 연습해보기
Account ac1 = new Account("0225", "서대길", 2000);
ac1.deposit(5000);
System.out.println("대길이의 현재 잔액: "+ac1.balance());
ac1.withdraw(3000);
System.out.println("대길이의 현재 잔액: "+ac1.balance());
System.out.println("******************");
//3명의 계좌를 추가 개설해서 입출해보세요
Account ac2 = new Account("0330", "김건부", 3000);
ac2.deposit(5000);
System.out.println("건부의 현재 잔액: "+ac2.balance());
ac2.withdraw(3000);
System.out.println("건부의 현재 잔액: "+ac2.balance());
System.out.println("******************");
Account ac3= new Account("0901", "전정국", 10000);
ac3.deposit(2000);
System.out.println("정국의 현재 잔액: "+ac3.balance());
ac3.withdraw(2000);
System.out.println("정국의 현재 잔액: "+ac3.balance());
}
}
접근지정자
; 변수/메소드의 접근을 제한하는 것
. 종류
- private : 선언한 클래스 안에서만 사용할 수 있다.
- default : 같은 패키지안에서는 사용가능하다.
- protected : 상속관계에 있는 다른 패키지에 있는 클래스는 변수/메소드에 접근 가능하다.
- public : 다른 패키지까지 모두 사용가능하다.
package classstudy;
import bak.A;
class B extends A{
void m() {
System.out.println(super.name);
}
}
public class Class18 {
public static void main(String[] args) {
A a = new A();
String value = a.name; //위에서 name을 private로 선언하면 오류로 뜸
a.getName();
}
}
package classstudy;
import java.util.Scanner;
/*
사칙연산을 하는 계산기 클래스를 작성하시오
int result;
더하기 add()
빼기 sub()
곱하기 mul()
나누기 div()
*/
class Clculator {
int x, y, sum;
public Clculator(int x, int y) {
this.x = x;
this.y = y;
}
int add() {
sum = x + y;
return sum;
}
int sub() {
sum = x - y;
return sum;
}
int mul() {
sum = x * y;
return sum;
}
int div() {
sum = x / y;
return sum;
}
}
public class CalculatorEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("두 수를 입력하세용");
int a = sc.nextInt();
int b = sc.nextInt();
System.out.printf("입력한 수는[%d] || [%d] 입니다.", a, b);
System.out.println(" ");
Clculator cl1 = new Clculator(a, b);
while (true) {
System.out.println("==================================");
System.out.println("1.덧셈 2.뺄셈 3.곱셈 4.나눗셈");
System.out.println("===================================");
System.out.println("원하는 걸 입력하세요");
int c = sc.nextInt();
if (c == 1) {
System.out.println(cl1.add());
} else if (c == 2) {
System.out.println(cl1.sub());
} else if (c == 3) {
System.out.println(cl1.mul());
} else if (c == 4) {
System.out.println(cl1.div());
}
}
}
}