반응형
* 이 강의는 [국비지원교육]으로 배울 수 있게 되었습니다.

조건문과 반복문

2주차는 if문과 조건이 여러 개일 때의 if문, switch-case문, 반복문(while, do-while, for문)에 대해서 배웠습니다.
이제는 조금 적응이 된것도 같지만 배속의 압박이 있는 편입니다.

while문은 결과나 변수가 true, false일 경우 많이 사용하고 (do-while문은 do로 한번 실행하고 while문을 실행),
for문은 특정 횟수와 관련해서 많이 사용을 하고 있습니다. 

중첩 반복문은 제 기준으로 좀 어려웠는데 구구단 프로그램을 만들어서 많은 이해가 되었던 거 같습니다.

중접 for문과 중첩 while문을 이용해서 구구단 만들기

break 문과 continue문을 마지막으로 기초강의는 끝이 나고 객체 지향에 관련 된 강의가 시작됩니다.
기초 강의는 초보자가 이해하기에는 쉬운 부분도 있고 아리송한 부분도 있었습니다. 특히 조건문과 반복문은 나중에 계속 사용하게 되기 때문에 간단한 예시를 들여서 설명하신 거 같은데 아직까지는 어려운 부분이 많았습니다. (정확히는 개념이 어렵다기보다는 활용이 어려워서 어떤 식으로 활용하는지에 대해서 좀 더 자세한 설명이 있었으면 합니다.)

 

객체

절차지향 프로그래밍

시간의 흐름에 따른 프로그래밍(C++, C#, Python 등)
학생의 하루를 프로그래밍한다면
일어난다 -> 씻는다 -> 밥을 먹는다 -> 학교를 간다 -> 수업을 받는다 -> 집에 온다
이런 식의 시간의 흐름을 따라서 만듬. 

 

객체지향 프로그래밍

1) 객체를 정의
2) 각 객체의 속성을 멤버 변수로 역할을 메서드로 구현
3) 각 객체끼리 소통을 통해 협력을 구현

생활 속의 객체
- 온라인 쇼핑몰에서 회원 로그인을 하고 여러 판매자가 판매하는 제품 중 하나를 골라서 주문을 했다
entity, objects, domain 등으로 부르기도 한다.

 

클래스

클래스는 객체의 속성이다.
// 학생 클래스
public class Student {
	int studentNumber;
    	int MajorCode; // 전공과목코드
    	String MajorName; // 전공과목 이름
        String studentName;
        int grade;
}


// 주문 클래스
public class Order {
	int orderId;
        String buyerId;
        String sellerId;
        int product;
        String orderDate;
}​

 

함수(function)

하나의 기능을 구현
호출하여 사용하고 기능이 끝나면 제어가 반환
여러 곳에서 동일한 방식으로 호출하여 사용할 수 있음

더하기 함수

 

함수 정의하기

함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성.
int add(int num1, int num2) {  // 이 부분이 가장 중요함 num1과 num2가 매개변수(받아오는 값 타입과 변수 이름)
	int result;
    	result = num1 + num2;
    	return result;
}​

// 반환 값이 없으면 맨 앞에 void를 적어주면 된다
// 매개변수가 없으면 () 안에 아무것도 안적어줘도 된다


스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리. (함수의 수행이 끝나면 자동으로 반환) 

 

메서드

객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
멤버 함수라고도 함
메서드를 구현함으로써 객체의 기능이 구현
메서드의 이름은 그 객체를 사용하는 클라이언트에 맞게 짓는 것이 좋음 // 예시 : getStudentName()

 

인스턴스

실제 클래스 기반으로 생성된 객체. 각각 다른 멤버 변수 값을 가지게 된다.
학생이라는 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년 등의 값을 가지게 된다.
new 키워드를 사용하여 인스턴스 생성

 

힙 메모리

생성된 인스턴스는 동적 메모리(heap memory)에 할당됨.
하나의 클래스로부터 여러 개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 된다.

 

용어 정리

객체 : 객체 지향 프로그램이 대상. 생성된 인스턴스
클래스 : 객체를 프로그래밍하기 위한 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 : 클래스의 속성, 특성
메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 : 생성한 인스턴스의 메모리 주소 값

 

생성자 (constructor)

객체를 생성할 때 new 키워드와 함께 사용 -> new Student();
생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new와 함께 호출
객체가 생성될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행하는 메서드를 호출함
생성자는 반환 값이 없고, 클래스 이름과 동일
대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private로 선언되는 경우도 있음

 

기본 생성자 (default constructor)

클래스에는 반드시 적어도 하나 이상의 생성자가 존재
클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음
클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 준다
매개 변수가 없고 구현부가 없음

 

간단한 테스트 코드

// UserInfo.java

package test;

public class UserInfo {
    public String userId;
    public String userPassWord;
    public String userName;
    public String userAddress;
    public String phoneNumber;

    public UserInfo(){}

    public UserInfo(String userId, String userPassWord, String userName) {
        this.userId = userId;  // this 를 사용해야 멤버변수라고 지정이 됨.
        this.userPassWord = userPassWord;
        this.userName = userName;
    }

    public String showUserInfo() {
        return "고객님의 아이디는 " + userId + "이고, 등록된 이름은 " + userName + "입니다.";
    }
}​


// UserInfoTest.java

package test;

public class UserInfoTest {
    public static void main(String[] args) {
        UserInfo userLee = new UserInfo();
        userLee.userId = "a12345";
        userLee.userName = "Lee";
        userLee.userPassWord = "pass1234";
        userLee.userAddress = "Seoul, Korea";
        userLee.phoneNumber = "010-0000-0000";

        System.out.println("--------------------------------"); // 구분자
        System.out.println(userLee.showUserInfo());
        System.out.println("--------------------------------");
        
        // 매개변수를 이용한 방법
        UserInfo userKim = new UserInfo("b12345", "asdpass","kim");
        System.out.println(userKim.showUserInfo());
    }
}​

실행 시 콘솔창

 

실습

* 실습 1번 문제
키가 180이고 몸무게가 78킬로인 남성이 있습니다. 이름은 Tomas이고 나이는 37세입니다.

// GuestInfo.java
package test;

public class GuestInfo {
    public int key;
    public int weight;
    public String sex;
    public String name;
    public int age;

    public GuestInfo() {}
    public GuestInfo(int key, int weight, String sex, String name, int age) {
        this.key = key;
        this.weight = weight;
        this.sex = sex;
        this.name = name;
        this.age = age;
    }

    public String GuestShowInfo() {
        return ("키가 " + key + "이고 몸무게가 " + weight + "킬로인 " + sex + "이 있습니다. 이름은 " + name + "이고 나이는 " + age + "세 입니다.");
    }
}​

// GuestInfoTest.java

package test;

public class GuestInfoTest {
    public static void main(String[] args) {
        GuestInfo guestTomas = new GuestInfo();
        guestTomas.key = 180;
        guestTomas.weight = 78;
        guestTomas.sex = "남성";
        guestTomas.name = "Tomas";
        guestTomas.age = 37;

        System.out.println(guestTomas.GuestShowInfo());
    }
}​


실습 1번 문제 결과

* 실습 2번 문제
주문 접수 번호 : 1
주문 전화번호 : 010-0000-0000
주문 집 주소 : 대한민국 서울
주문일 : 2022-08-31
주문 시간 : 15:26
주문 가격 : 3500
주문메뉴번호 : 2

// OrderInfo.java

package test;

public class OrderInfo {
    public int OrderNumber;
    public String OrderPhone;
    public String OrderAddress;
    public String OrderDate;
    public String OrderTime;
    public int OrderPrice;
    public int OrderMenuNumber;

    public OrderInfo(){}

    public OrderInfo(int orderNumber, String orderPhone, String orderAddress, String orderDate, String orderTime, int orderPrice, int orderMenuNumber) {
        this.OrderNumber = orderNumber;
        this.OrderPhone = orderPhone;
        this.OrderAddress = orderAddress;
        this.OrderDate = orderDate;
        this.OrderTime = orderTime;
        this.OrderPrice = orderPrice;
        this.OrderMenuNumber = orderMenuNumber;
    }

    public String OrderShowInfo() {
        return("주문 접수 번호 : " + OrderNumber + "\n" + "주문 전화번호 : " + OrderPhone + "\n" +
                "주문 집 주소 : " + OrderAddress + "\n" + "주문일 : " + OrderDate + "\n" + "주문 시간 : " + OrderTime + "\n" +
                "주문 가격 : " + OrderPrice + "\n" + "주문메뉴번호 : " + OrderMenuNumber + "\n");
    }

}​


// OrderInfoTest.java

package test;

public class OrderInfoTest {
    public static void main(String[] args) {
        OrderInfo order1 = new OrderInfo();
        order1.OrderNumber = 1;
        order1.OrderPhone = "010-0000-0000";
        order1.OrderAddress = "대한민국 서울";
        order1.OrderDate = "2022-08-31";
        order1.OrderTime = "15:26";
        order1.OrderPrice = 3500;
        order1.OrderMenuNumber = 2;

        System.out.println(order1.OrderShowInfo());

        System.out.println("--------------------------------------------------------");
        OrderInfo order2 = new OrderInfo(2, "010-0001-0001", "대한민국 서울시", "2022-08-31", "15:41", 4500, 3);

        System.out.println(order2.OrderShowInfo());

    }
}


실습 2번 문제

그전에 만든 파일을 보고 실습 1, 2번까지 완료했습니다.
1번은 데이터를 담아서 만들었고 2번은 파라미터로 넘겨서까지 만들어보았습니다.
점점 난이도는 올라가고 있지만 만들고 나니 뿌듯합니다!
반응형
복사했습니다!