코드 그라데이션

후발대 6일차 본문

Java/후발대

후발대 6일차

완벽한 장면 2023. 1. 14. 10:01

클래스와 인스턴스

 

클래스란, 객체지향, 생성자, 멤버변수,클래스 가져다 쓰기, 인스턴스

  • 클래스란?
  • : 정보를 묶는것

: 현실과 비슷한 개념(객체)을 나타내기 위한 자바의 도구를 클래스 라고 함

  • 클래스에는 기본적으로, 멤버변수, 생성자, 게터와 세터, 메서드가 존재 할 수 있음
  • 클래스를 가져다 쓰면?
  • 1) 코드의 재 사용성이 높아진다. 2) 코드의 관리가 용이하다. 3) 신뢰성이 높은 프로그래밍을 가능하게 한다.
  • 생성자
  • : 여러개를 선언할 수 있다. (파라미터가 다르게)

: 특별한 메소드로 , 반환타입이 없고, 클래스명과 동일한 이름을 가짐.

 

수업 코드

// 원격강의 자료 복습
//Course 클래스 
public class Course {
     // 멤버변수
		// title, tutor, days 가 Course 라는 맥락 아래에서 의도가 분명히 드러나죠!
    public String title;
    public String tutor;
    public int days;
}

// (기본)생성자 = 특별한 메서드, 
// 클래스명과 이름 동일한 메서드 
// 반환값이 없다.
public Course(){}

// 생성자 (파라미터가 3개짜리 생성자)
// 단축키는 alt+insert 를 통해 생성이 가능하지만 
// 기본기를 다지는 시기에는 그냥 코드를 치며 문법을 외우고 생김새를 익히도록 해보자.
public Course(String title, String tutor, int days) {
this.title =title;
this.tutor =tutor;
this.days =days;
}

--
// 메인클래스
public class Prac6 {
 // 객체화, 그리고 클래스
//    이렇게 정보를 묶은 '클래스'로 만들어 놓으면 우리는 이제 변수처럼 사용을 할 수 있음.

    public static void main(String[] args) {

        Course course = new Course();
        course.title = "Spring";
        course.tutor = "남병관";
				course.days =35;

        System.out.println(course.title);
        System.out.println(course.tutor);
				System.out.println(course.days);

			
    }
}


// 클래스의 생성자 중 파라미터가 3개인 생성자를 통해 객체화, 인스턴스 생성
String title = "Spirng";
String tutor = "남병관";
int days =35;

Course course = new Course(title, tutor, days);
System.out.println(title);
System.out.println(tutor);
System.out.println(days);

    /* 객체지향은 현실 세계를 빗대서 디지털 세계에서도 이 개념을 활용을 하자.
        즉, Course라는 공통된 정보가 있으면, 클래스에서 그 공통 정보를 묶어서 사용을 하자
        class에는 기본적으로 멤버변수가 들어가고, 생성자가 있고, getter와 setter가 있는 형태이고, 클래스에서 처리해줘야할 메서드들을 구현한다.
        그리고 다른 클래스에서 이 클래스를 사용할 수 있게 되는데, 이러한 과정을 우리는 인스턴스화 라고 한다.

        클래스와 객체는 같은 건가요? No.
        클래스는 공통된 정보를 묶은 것이고, 인스턴스가 객체와 유사한 개념이라고 생각하면 된다.

        생성자는 파라미터가 여러개인 것을 불러와서 생성하는 방식과, 기본생성자에 값을 넣어주는 방식이 있다.

        클래스를 잘 만들어놓게 되면, 클래스를 쉽게 가져다가 쓸 수 있으며, 코드의 재사용성이 높아지고, 코드의 관리가 용이해지므로,
        잘 만들어놓아야만 다른 코드에 안좋은 영향을 주지 않고, 튼튼한 프로그래밍을 할 수 있다.
     */



-------
//예제) Tv


public class Tv {
    public String color;
    public boolean power;
    public int channel;

 // 전원이 꺼져있으면 켜고 켜져있으면 끄라는 의미 
    public void power() {
        power = ! power;

    }

    public void channerUp() {
        channel++;
    }

    public void channelDown() {
        channel--;
    }
}

----

public class Prac06 {
    public static void main(String[] args) {

    Tv t = new Tv();
    t.channel =7;
    t.channelDown();

        System.out.println("현재 채널은 " + t.channel+"입니다.");

    }
}


----------------
// 하나의 클래스에서 위의 코드를 작성한다면? Prac06 클래스에서 전체 작성한 코드의 예
class Tv {
    String color;
    boolean power;
    int channel;

    void power() {
        power = ! power;
    }

    void channelUp() {
        channel++;
    }
    void channelDown() {
        channel--;
    }
}


public class Prac06 {
    public static void main(String[] args) {
        Tv t = new Tv();
        t.channel = 7;
        t.channelDown();
        System.out.println("현재채널은" + t.channel + "입니다.");
        
       
    }
}

---------------

예제) BookShop
    // Book 클래스 만들고 멤버변수로 4개 선언하기 (title, author, publisher, price)
    // 멤버변수의 접근제어자는 public (접근제어자) 으로 하기
	// 메인클래스에서 Book클래스를 이용하여 인스턴스를 만들기
    // 값을 넣어서 출력해보기
    
    // 1-1    
        // 기본생성자 만들기        
		// 파라미터 4개짜리 생성자 만들기 
        // 파라미터가 4개짜리인 생성자를 통해 객체 만들기
		// 메인 클래스에서 변수와 값을 선언하고 파라미터 4개를 넘겨받는 방식으로 출력해보기

public class Book {
    

    public String title;
    public String author;
    public String publisher;
    public int price;

	public Book(){;}
	public Book(String title, String author, String publisher, int price) {
		this.title =title;
		this.author =author;
		this.publisher =publisher;
		this.price = price;
}

--------
public class Prac {
    public static void main(String[] args) {
// 1-1.
        Book book1 = new Book();
        book1.title = "타이탄의 도구들";
        book1.author = "ABC";
        book1.publisher = "교보문고";
        book1.price = 23000;
        
        System.out.println(book1.title);
        System.out.println(book1.author);
        System.out.println(book1.publisher);
        System.out.println(book1.price);
        System.out.println("내가 산 책은" + book1.title+"이고, "+ "작가는 "+ book1.author+"이다.");
    }
}

--------
public class Prac {
    public static void main(String[] args) {
// 1-2
				String title ="타이탄의 도구들";
        String author ="ABC";
        String publisher = "교보문고";
        int price = 23000;

        Boook book2 = new Boook(title, author,publisher,price);
        System.out.println(title);
        System.out.println(author);
        System.out.println(publisher);
        System.out.println(price);

----


// 카드 생성 프로그램  예제
// 3장의 카드를 발급함
// 발급, 결제, 비밀번호 변경의 기능을 넣은 프로그램 
public class Card {
    public String user;
    public int pw;
    public int bal;

    public Card() {;}

    public Card(String user,int pw,int bal){
        this.user=user;
        this.pw=pw;
        this.bal=bal;
        System.out.println(this.user+"님, 카드등록완료!");
    }

    public int getPw() {
        return pw;
    }
    public void setPw(int pw) {
        this.pw = pw;
        System.out.println("비밀번호 변경완료!");
    }
}

---
public class Prac06 {
    // 카드 발급 프로그램 만들기! 카드 3장 만들기.
    public static void main(String[] args) {
        // 이름, 잔액, 비밀번호 등을 입력해야 하므로 스캐너 필요.
        Scanner sc = new Scanner(System.in);
        // 그래서 배열 형태가 필요

        Card[] c = new Card[3];

        // 3장이 발급될동안 해당 정보들이 반복될것이므로, for문을 사용해준다.
        for (int i = 0; i < 3; i++) {
            System.out.println("이름: ");
            String name = sc.nextLine();

            System.out.println("비밀번호: ");
            int pw = sc.nextInt();

            System.out.println("잔액: ");
            int bal = sc.nextInt();

            // 이렇게만 두면, 잔액이 버퍼에 남아있으므로, 버퍼를 일부러 한 번 비워주어야 한다.
            sc.nextLine();
            c[i] = new Card(name,pw,bal); //각각 i번째 카드에 정보 입력 후 카드 생성 가능
        }

        // 결제 구현
        // 비밀번호 일치여부 확인, 일치하면 5000원 결제, 여건이 되지 않으면 "잔액이 부족합니다" 출력
        //=> 일단 Card 클래스에서 비밀번호 일치하는지 여부를 판단하는 메서드가 필요하게 된다.
        // 이거 그냥 Card 클래스에서 게터세터로 가지고 와서 일치여부 판단한다(Day06에서는 아직 배우지 않았음)
        // 그래서 Card에 게터를 써줬음 그리고 결제 3번 반복할거니까, 반복문을 써준다.

        for (int i = 0; i < 3; i++) {
            System.out.println(c[i].user + " 님, 결제 진행 중입니다.");

            System.out.println("패스워드를 입력해주세요: ");
            int pw = sc.nextInt();
            // 비밀번호 일치하는 경우
            if(pw == c[i].getPw()) {
                if(c[i].bal<5000) {
                    System.out.println("잔액이 부족합니다!");
                }
                else {
                    c[i].bal -=5000; // c[i].bal = c[i].bal - 5000;
                    System.out.println("결제가 완료되었습니다!");
                }
            }
            // 비밀번호 불일치 하는 경우
            else {
                System.out.println("비밀번호가 일치하지 않습니다!");
            }
        }

        // 비밀번호 변경
        // 이번에는 새로운 값을 넣어줘야 하니, set이 필요할거야. Card클래스에 set을 써줘라.
        for (int i = 0; i<3; i++) {
            System.out.println(c[i].user + "님, 기존 패스워드를 입력하세요: ");
            int pw = sc.nextInt();

            // 비밀번호 일치, 변경
            if(pw==c[i].getPw()) {
                System.out.println("새로운 pw를 입력하세요: ");
                pw = sc.nextInt();

                // 변경한 비밀번호가 기존 비밀번호와 동일하다면 출력될 메시지는 아래에.
                if(pw == c[i].getPw()) {
                    System.out.println("기존 비밀번호와 동일합니다!");
                }
                else {
                    c[i].setPw(pw); // 동일하지 않은 경우, 새롭게 들어온 값으로 변경된다!
                }
            }
            // 비밀번호 불일치, 변경 불가 => if문 이외의 경우이므로, else문 처리를 통해 구현.
            else {
                System.out.println("비밀번호가 불일치하여 변경 불가!");
            }
        }

    }
}
728x90

'Java > 후발대' 카테고리의 다른 글

후발대 8일차  (0) 2023.01.14
후발대 7일차  (0) 2023.01.14
후발대 5일차  (1) 2023.01.14
후발대 4일차  (0) 2023.01.14
후발대 3일차  (0) 2023.01.14
Comments