JAVA 객체지향 프로그래밍 OOP, Class 기본개념 및 예제
https://developernew.tistory.com/21
JAVA 코딩 객체지향프로그래밍 OOP, 클래스 Class, 함수, 메소드
객체 지향 프로그래밍(OOP: Object Oriented Programming) 객체 중심의 프로그래밍 방식 객체끼리의 상호 작용을 통하여 프로그램을 작성하는 방식 부품화 캡슐화 == 클래스 속성과 기능을 하나의 캡슐처
developernew.tistory.com
JAVA 객체지향 프로그래밍 OOP, Class, Static
https://developernew.tistory.com/22
JAVA 코딩 객체지향프로그래밍 OOP, 클래스 Class, static
자바 클래스 기본개념 및 기본예제 https://developernew.tistory.com/21 JAVA 코딩 객체지향프로그래밍 OOP, 클래스 Class, 함수, 메소드 객체 지향 프로그래밍(OOP: Object Oriented Programming) 객체 중심의 프로그래
developernew.tistory.com
중첩클래스
: 클래스 안에 만들어지는 클래스
종류
1. 일반중첩클래스 *
2. static 중첩클래스 *** ; 일반중첩클래스에서 static을 붙이면 static 클래스
---------------------클래스 안의 클래스
3. 지역중첩클래스 ; 메소드 안에 만들어지는 클래스
4. 익명중첩클래스 ************** (중요) ; 클래스의 재정의
일반중첩클래스, static중첩클래스
1. 일반중첩클래스
2. static 중첩클래스
클래스 안에 만들어지는 멤버 클래스
클래스 안에서는 필요하지만 외부에서 단독적으로 쓰임이 없는 것을 관리하기 위해서 만든다
public class Suit {
int price;
Top t = new Top();
Bottom b = new Bottom();
// static 중첩클래스
static class Top{
int price;
}
// 일반중첩클래스
private class Bottom{
int price;
}
}
지역중첩클래스
: 매소드 안에서 사용되는 클래스
임시적으로 데이터들을 관리하기 위해서 만들어진다
데이터 관리할 때 사용
- getter, setter, 생성자 등은 잘 만들어 쓰지 않음
- 멤버변수만 만들어 데이터를 묶어 관리
public class Main {
public static void main(String[] args) {
class Info{
String name;
int age;
}
Info in = new Info();
in.name = "홍길동";
in.age = 20;
}
}
익명중첩클래스
: 객체 상황에 맞게 클래스를 재정의 하는 구문
현재 사용할 객체의 상황 상 맞지 않는 부분을 수정하거나
필요한 내용을 추가하는 구문 ; 일회성
추상클래스, 인터페이스의 객체를 생성할 때 사용하기도 한다**
오버라이드
: 메소드의 재정의
메소드의 형태는 같게 하고 내용을 재정의하는 구문
// Main class
public class Main {
public static void main(String[] args) {
Key enter = new Key() {
public void push() {
System.out.println("실행");
}
};
enter.push();
Key esc = new Key() {
public void push() {
exit();
System.out.println("종료!");
}
public void exit() {
System.out.println("프로그램이 종료됩니다");
System.exit(0); // 프로그램 종료 메소드 ; 0은 정상 종료, 0이 아닌 수는 비정상 종료
}
};
// esc.exit(); 추가된 메소드는 외부에서 사용 불가
// 추가시킨 메소드는 익명중첩클래스 내부에서 사용하려고 만든다
esc.push(); //임시로 Key가 아니라 Main 내의 메소드를 가리키게 된다
// * 바인딩
}
// Key class
public class Key {
public void push() { // 이 부분에 Main의
System.out.println("구현할 내용이 없다");
}
static final ; 심볼릭 상수 ; 상수화 변화
: 변수공간의 데이터를 변경할 수 없는 변수
- 프로그램이 실행하면서 공간이 만들어지고 프로그램이 끝날 때 공간이 소멸된다
- 프로그램 전체적으로 사용되고
그 값이 변경되지 않고 프로그램에서 의미를 가지고 있는 데이터를 저장하여
보다 쉽게 구분하여 사용하기 위해서
- 변수명은 대문자를 권장한다
// Key class
public class Key {
// 상수화 변수 설정
public static final String SKILL1;
public static final String SKILL2 = "w";
public static final String SKILL3 = "e";
public static final String SKILL4 = "r";
// 프로그램 실행할 때 공간이 만들어짐 + final 설정으로 인해 한 번 생성되면 바뀌지 않는다
// 초기화를 진행하지 않으면 에러남
static { // static 필드 : 프로그램이 실행될 때 이 안에 있는 코드를 먼저 실행한다
SKILL1 = "q";
}
// 이 방식으로 초기화할 경우 main 에서 에러남
public void disp() {
System.out.println(SKILL1);
}
// 이 방식으로 초기화시키는 경우 CLASS 내부에서만 사용 가능
// 클래스 외부인 Main에서 에러
}
// Main class
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("키 입력 : ");
String key = sc.next();
// q w e r
switch(key) {
case Key.SKILL1:
System.out.println("SKILL1");
break;
case Key.SKILL2:
System.out.println("SKILL2");
break;
case Key.SKILL3:
System.out.println("SKILL3");
break;
case Key.SKILL4:
System.out.println("SKILL4");
break;
default:
System.out.println("잘못된 키 입력");
}
}
-> 이 경우 메인화면은 에러남
// 올바른 초기화를 진행한 경우
public static final String SKILL1 = "q";
public static final String SKILL2 = "w";
public static final String SKILL3 = "e";
public static final String SKILL4 = "r";
public void disp() {
System.out.println(SKILL1);
}
출력화면
Exercise 1
[Student class]
한 학생의 성적을 관리하는 클래스
이름, 알고리즘, 인공지능, 이산수학, 총점, 평균
[Class class]
한 반을 관리하는 클래스
최대 10명까지만 관리하는 클래스
알고리즘_총계, 인공지능_총계, 이산수학_총계
총점_총계, 평균_총계, 학생수_카운트
// Student class
// 한 학생의 성적 관리
public class Student {
private String name;
private int ag,ai,dm,tot;
private double avg;
// 생성자
public Student(String name,int ag,int ai,int dm) {
this.name = name;
this.setAg(ag);
this.setAi(ai);
this.setDm(dm);
Class.addSu();
}
// setter
public void setName(String name) {
this.name = name;
}
public void setAg(int ag) {
if(ag < 0 || ag > 100) {
System.out.println("잘못된 점수 입력!");
return;
}
this.ag = ag;
setTot();
setAvg();
}
public void setAi(int ai) {
if(ai < 0 || ai > 100) {
System.out.println("잘못된 점수 입력!");
return;
}
this.ai = ai;
setTot();
setAvg();
}
public void setDm(int dm) {
if(dm < 0 || dm > 100) {
System.out.println("잘못된 점수 입력!");
return;
}
this.dm = dm;
setTot();
setAvg();
}
private void setTot() {
this.tot = ai + ag + dm;
}
private void setAvg() {
this.avg = tot / 3.0;
}
// getter
public String getName() {
return name;
}
public int getAg() {
return ag;
}
public int getAi() {
return ai;
}
public int getDm() {
return dm;
}
public int getTot() {
return tot;
}
public double getAvg() {
return avg;
}
// user method
public void showData() {
String print = String.format("%-8s %-10d %-10d %-10d %-6d %-10.4f\n", name,ag,ai,dm,tot,avg);
System.out.println(print);
}
}
// Class class
public class Class {
private Student[] arr = new Student[10];
private int agt,ait,dmt,tott;
private static int su;
private double avgt;
public static void addSu() {
Class.su++;
}
public int getSu() {
return su;
}
public void stuDisp() {
for(int i = 0; i < su; i++) {
arr[i].showData();
}
}
public void showTotal() {
System.out.println(String.format("%-8s %-10s %-10s %-10s %-6s %-10s\n", "이름","알고리즘","인공지능","이산수학","총점","평균"));
this.stuDisp();
System.out.println("========================================================");
String print = String.format("%-8s %-10d %-10d %-10d %-6d %-10.4f\n", "총계",agt,ait,dmt,tott,avgt);
System.out.println(print);
}
public void addStudent(Student st) {
arr[su - 1] = st;
agt+=st.getAg();
ait+= st.getAi();
dmt += st.getDm();
tott += st.getTot();
setAvgt();
}
private void setAvgt() {
avgt = tott / (double)su / 3.0;
}
}
// Main class
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Class c = new Class();
while(true) {
System.out.print("메뉴 입력\n1.학생 추가 2.학생 보기3.종료\n입력 : ");
int select = sc.nextInt();
switch(select) {
case 1:
if(c.getSu() == 10) {
System.out.println("정보를 추가할수 없습니다.");
break;
}
System.out.print("이름 입력 : ");
String name = sc.next();
System.out.print("알고리즘 점수 입력 : ");
int ag = sc.nextInt();
System.out.print("인공지능 점수 입력 : ");
int ai = sc.nextInt();
System.out.print("이산수학 점수 입력 : ");
int dm = sc.nextInt();
Student st = new Student(name, ag, ai, dm);
c.addStudent(st);
break;
case 2:
c.showTotal();
break;
case 3:
System.out.println("프로그램이 종료 됩니다.");
sc.close();
System.exit(0);
default:
System.out.println("잘못된 입력!");
}
}
}
}
'Backend > JAVA' 카테고리의 다른 글
JAVA 코딩 Class 클래스 다형성 (0) | 2023.02.23 |
---|---|
JAVA 코딩 객체지향프로그래밍 OOP, 배열 클래스 Array Class (0) | 2023.02.22 |
JAVA 코딩 객체지향프로그래밍 OOP, 클래스 Class, static (0) | 2023.02.16 |
JAVA 코딩 객체지향프로그래밍 OOP, 클래스 Class, 함수, 메소드 (0) | 2023.02.16 |
JAVA 코딩 제어문 - 반복문 : while, for, do ~ while문 (0) | 2023.02.06 |