카테고리 없음

2024. 7. 1. (월) 슈퍼코딩 부트캠프 Day 25 / 주특기 2주차

태영9922 2024. 7. 1. 19:15

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 메소드가 없는 클래스