1. OOP란?
- Object Oriented Programming (객체 지향 프로그래밍)
- 명령어를 나열하는 것(절차지향)이 아닌 객체끼리 상호작용 하듯이 코드를 작성하는 방식.
- 속성 / 행위
- 왜 객체지향 프로그래밍을 하는가? 절차지향은 식당으로 예를 들면 요리, 서빙, 설거지 등등 모든 걸 혼자 한다는 개념이라고 보면, 객체 지향은 각 업무를 담당하는 직원을 고용하여 업무를 분담하는 개념. // 코드 재사용성이 올라감. 유지보수가 용이해짐. -> 대형 프로젝트에 적합.
- 객체지향 프로그래밍을 이루는 4가지 개념
1. 추상화
2. 캡슐화
3. 상속
4. 다형성
1. Java 메소드란?
- 함수가 필요한 이유 : 반복되는 동작들을 수행하기 위한 내용을 묶어서 정의.
- 함수 정의 : 리턴타입, 메소드 이름, 파라미터(=인수, 매개변수, arguments), 반환 값(=리턴 값, 결과 값, 함수가 돌려주는 값)
boolean(반환타입) regStudent(메소드 이름) (String name(파라미터)){
return true; (반환 값)
}
- 함수 안에 메소드가 포함되어 있는 개념.
- 자바는 모든 함수가 메소드이다.
//학생 평균을 구하는 함수를 구현
public class Scores {
public static void main(String[] args) {
int studentAClass1 = 50;
int studentAClass2 = 30;
int studentAClass3 = 45;
int studentBClass1 = 60;
int studentBClass2 = 65;
int studentBClass3 = 66;
double avgA = calculateAverage(studentAClass1, studentAClass2, studentAClass3);
double avgB = calculateAverage(studentBClass1, studentBClass2, studentBClass3);
System.out.printf("Class A Average score: %.2f\n", avgA);
System.out.printf("Class B Average score: %.2f\n", avgB);
}
static double/*반환값*/ calculateAverage/*함수이름*/(int studentAClass1, int studentAClass2, int studentAClass3/*파라미터*/) {
return (studentAClass1 + studentAClass2 + studentAClass3) / (double) 3; /* 리턴 값 */
}
}
- 리턴값이 없을때 "void" : 콘솔에 출력만 하거나 따로 return 할 필요가 없을 때
- class 밖에서는 함수 정의 불가
public class MethodExamples {
static int toUnicode(char ch) {
return (int) ch;
}
static int sumAndMultiplyFour(int a, int b) {
return (a + b) * 4;
}
static String sayHello() { // 파라미터는 없고 리턴 값은 있음
return "Hello";
}
static void printHello(String str) {// 파라미터는 있는데 리턴 값은 없음
System.out.printf("함수 안에서 출력 %s\n", str);
}
static void printHi() { //파라미터도 없고 리턴 값도 없음
System.out.println("Hi");
}
public static void main(String[] args) {
char ch = 'A';
int decode = toUnicode(ch);
System.out.println(decode);
int myInt = 10;
int myInt2 = 5;
int result = sumAndMultiplyFour(myInt, myInt2);
System.out.println(result);
String sayHello = sayHello();
printHello(sayHello);
printHi();
}
}
1. 클래스 : 속성과 메소드로 이루어진 설계도
//객체 생성
public class Fish {
//속성
String sex; //male,female
boolean havingPoison; //독 여부
String StartSpawningDate; //산란시작기간
String endSpawningDate; //산란종료기간
String livingSea; //사는 바다
//행위
void eat(String food) {
System.out.println("물고기는 " + food + "을/를 먹는다");
}
void swim(int meter) {
System.out.println(meter + "m를 헤엄친다");
}
void makeCrowd(Fish otherFish) {
System.out.println("다른물고기와 무리짓는다");
}
void sleep() {
}
}
2. naming case
int HelloMyWorld; // 파스칼 케이스
int helloMyWorld; // 카멜 케이스
int hello_my_world; // 스네이크 케이스
int HELLO_MY_WORLD; //스크리밍 스네이크 케이스
//int hello-my-world; // 케밥케이스 , 자바 지원 안됨
- 클래스 이름 : 파스칼케이스
- 인스턴스 변수, 메소드 이름 : 카멜케이스
- 상수 : 스크리밍 스네이크 케이스
1. 자바 인스턴스
- 인스턴스화란? 만든 클래스를 토대로 객체를 만드는 것
2. 클래스 생성자 // 디폴드 생성자 : 클래스를 만들면 기본적으로 만들어짐
Player player1 = new Player();
클래스형 변수이름 = new 생성자;
- 생성자 오버로드 : 반복되는 초기화 구문 방지 -> 생성자에 매개변수를 다르게 넣어서 생성
Teacher() { //디폴트 생성자, 생성자를 새로 만들려면 디폴트 생성자를 적어야함
}
Teacher(String pName, String pGender, String pSubjectName, String pSubjectCode) {
//이름, 성별, 과목이름, 과목코드를 매개변수로 하는 생성자
name = pName;
gender = pGender;
Subject newSubject = new Subject();
newSubject.subjectName = pSubjectName;
newSubject.subjectCode = pSubjectCode;
subject = newSubject;
}
3. 실행 클래스 : main 메소드가 있는 클래스
- 일반 클래스 : main 메소드가 없는 클래스