ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. Review / 7.객체지향프로그램
    개발자 수업/Java 2021. 10. 4. 22:51

    1. 프로그래밍 
        1) 컴퓨터에게 요구사항(일)을 시키기 위해 프로그래밍 언어(JAVA)로 만든 
           명령어 집합인 프로그램을 만드는 일.

    2. 컴파일 : 프로그래밍 언어를 기계어로 바꾸어 주는 일.

    3. 컴파일러 : 기계어로 바꾸어 주는 프로그램.
                 자바를 설치하면 자바 컴파일러도 설치됨.

    4. 자바의 역사 
        1) 1957
        2) 1984 
        3) 1995

    5. 자바 언어의 차이점
        1) 플랫폼에 독립적인 프로그래밍을 할 수 있음.   
        2) 객체지향 프로그램으로 유지보수, 확장성이 좋음.
        3) 안정적임.
        4) 풍부한 라이브러리 제공, 오픈소스와 연동됨.

    6. 변수
        1) 변하는 수
        2) 변하는 값을 프로그램에서 나타내기 위한 방법    
        3) 사람의 나이, 온라인 상품의 개수, 학생의 학년 ....
        4) 변수와 메모리 
            - 변수를 선언하는 것은 해당 자료형의 크기만큼의 메모리를 사용하겠다는 것임.
        5) 변수 이름
            - 그 쓰임에 맞는 이름으로 명명하는 것이 가독성에 좋음.
            - camel notation (numberOfStudent)    

    7. 명명법
        1) 클래스명은 명사,  메서드는 동사, 기능은 명사 + 동사

    8. 표기법
        1) CamelCase
            - 문자의 표현을 낙타 등처럼 했다고 해서 정해진 이름
            - 주로 객체지향 프로그램에서 사용함.
        2) snake_case   
            - 언더라인(_)으로 단어를 구분하는 명명법.
            - C, SQL, python 등에서 사용.     

     

     


     

    1. 객체(Object)
        1) 의사나 행위가 미치는 대상
        2) 구체적, 추상적 데이터 단위 (학생, 회원, 생산, 주문, 배송)
        3) 예) 쿠팡에 *회원 로그인을 하고 여러 *판매자가 *판매하고 있는 *제품 중 하나를 골라 주문한다

    2. 절차 지향 프로그래밍 vs 객체 지향 프로그래밍
        1) 아침에 일어나 4강의실에 가는 과정
            - 절차 지향 프로그래밍
                일어난다 -> 씻는다 -> 밥을 먹는다 -> 지하철, 버스를 탄다 -> 학원에 도착한다
            - 객체 지향 프로그래밍
                수강생 <-탄다-> 버스    수강생 <-먹는다-> 밥    수강생 <-간다-> 학원
        2) 객체 지향 프로그램은 어떻게 구현하느냐?
            - 객체를 정의하고
            - 각 객체 제공하는 기능들을 구현하고
            - 각 객체가 제공하는 기능들 간의 소통(메시지 전달)을 통하여 객체 간의 협력을 구현

    3. 클래스
        1) 객체의 청사진(blueprint) 임
        2) 객체의 속성은 멤버 변수(member Variable)로 선언함

    /*
     * 1) 클래스 : 객체를 정의해 놓은 코드임
     * 2) 클래스의 용도 : 객체를 생성하는데 사용함
     * 3) 객체 : 실존하는 사물이나 도구 등 => 객체는 클래스에서 정의된 내용대로 메모리에 생성된 것을 의미함
     * 4) 객체의 용도 : 객체의 속성과 기능에 따라 다름
     * 
     * 5) 클래스					객체(인스턴스)
     * 	  상품 설계도					상품
     * 	  모니터 설계도					모니터
     * 	  붕어빵 기계 					붕어빵
     */
    
    public class Student {
    	int studentNumber;
    	String studentName;
    	int majorCode;
    	String majorName;
    	int grade;
    }
    /*
     * 클래스 코딩하기
     * 	1) 클래스는 대문자로 시작하는 것이 좋다
     * 	2) java 파일 하나에 클래스는 여러 개가 있을 수 있지만 public 클래스와 .java 파일의 이름은 동일하다
     * 	3) Camel notation 방식으로 임명
     */
    
    public class Order {
    	int orderId;
    	String buyerId;
    	String sellerId;
    	int productId;
    	String orderDate;
    }
    package kr.co.ezenac.field;
    
    public class UserInfo {
    	String userId;
    	String password;
    	String userName;
    	String userAddress;
    	int phoneNumber;
    }



    4. 함수와 메서드
        1) 함수(function)
            - 하나의 기능을 수행하는 코드
            - 구현된 함수는 호출하여 사용하고, 호출된 함수는 기능의 실행이 끝나면 제어가 반납됨
            - 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음

    public class FunctionTest {
    	public static int addNum(int num1, int num2) {
    		int result;
    		result = num1 + num2;
    		return result;
    	}
    	
    	public static void sayHello(String greeting) {
    		System.out.println(greeting);
    	}
    	
    	public static int calcSum() {
    		int sum = 0;
    		int i;
    		for(i=0; i<=100; i++) {
    			sum += i;
    		}
    		return sum;
    		
    	}
    	
    	public static void main(String[] args) {
    		int n1 = 10;
    		int n2 = 20;
    		
    		int total = addNum(n1, n2);
    		sayHello("즐거운 오후입니다.");
    		int num = calcSum();
    		System.out.println(total);
    		System.out.println(num);
    	}
    }


        2) 함수 정의하기
            - 함수는 반환 값 타입, 이름, 매개변수, 함수 몸체(body)로 구성됨

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

    6. 메서드(method)
        1) 객체의 기능을 구현하기 위해서 클래스 내부에 구현되는 함수
        2) 멤버 함수(member function)이라고도 함
        3) 메서드를 구현함으로써 객체의 기능이 구현됨
        4) 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는 것이 좋음
            ex) getStudentName()

     

     

    // 설계도, 붕어빵틀을 만드는 작업
    /*
     * 객체의 구성요소
     * 	1) 속성(멤버 변수)과 기능(멤버 메서드)으로 되어 있음
     * 	2) 생성자
     */
    
    public class FieldInit {
    	
    	// 기본형 변수
    	byte byteField;			// 1 byte
    	short shortField;		// 2 byte
    	int intField; 			// 4 byte (default)
    	long longField;			// 8 byte
    	
    	boolean booleanField;	// 1
    	
    	char charField;			// 2
    	
    	float floatField;		// 4
    	double doubleField;		// 8
    	
    	// 참조형 변수
    	String strField;		// 4
    	int[] arrField;			// 4
    	
    	/*
    	 * toString() : 클래스의 멤버 변수(필드) 값들을 수시로 확인하고자 할 때나, 원하는 포맷으로 멤버 변수들을 출력하고자 할 때 많이 사용
    	 */
    	
    	public String toString() {
    		return "byteField : " + byteField +
    				", shortField : " + shortField +
    				", intField : " + intField +
    				", booleanField : " + booleanField +
    				", strField : " + strField;
    	}
    
    }
    
    
    
    /*
     * 1. 객체와 인스턴스
     * 	1) 일반적으로 객체나 인스턴스나 같은 말임
     * 	2) 객체(Object)는 인스턴스(instance)를 포함하는 형태임
     * 	3) 인스턴스는 new 연산자에 의해 메모리에 할당된 것을 말함	
     * 		- TV는 인스턴스다		TV는 TV클래스의 객체다
     * 		  TV는 객체다			TV는 TV클래스의 인스턴스이다
     * 	4) 인스턴스화(instantiate) : class로부터 instance를 생성하는 것
     * 		클래스 -----------------------------> 인스턴스(객체)
     * 
     * 2. new 연산자
     * 	1) 클래스에 있는 멤버들의 바이트 크기만큼 heap(힙)에다가 메모리 할당하여 동시에 초기화를 시켜주는 역할을 함
     * 	2) 인스턴스 생성 코드
     * 		클래스명 참조변수명 = new 클래스명();
     * 	3) 인스턴스 사용
     */
    
    public class FieldInitTest {
    	public static void main(String[] args) {
    		FieldInit fi = new FieldInit();
    		System.out.println(fi.byteField);		
    		System.out.println(fi.toString());
    	}
    }

     

     

     

    /*
     * this : 1) 클래스의 주소, 객체 자기 자신의 주소		<---> super : 조상 객체의 주소
     * 		  2) new라는 연산자가 인스턴스를 생성되면 비로소 활성화됨
     */
    
    public class Student /* extends Object */ {
    	
    	// 멤버 변수(필드)
    	String name;
    	int age;
    	
    	// Object 클래스의 toString() 오버라이딩(재정의)
    	@Override
    	public String toString() {
    		String str = "이름 : " + this.name + 
    				 	 ", 나이 : " + this.age;
    		return str;
    	}
    }
    
    
    public class StudentTest {
    	public static void main(String[] args) {
    		// 아래는 각각 독립된 저장공간을 가지는 인스턴스가 heap(힙)에 할당됨
    		Student stu1 = new Student();
    		Student stu2 = new Student();
    		
    		stu1.age = 20;
    		stu1.name = "김광현";
    		
    		System.out.println(stu1);
    		System.out.println(stu2);
    		
    		// stu1의 주소를 stu2에 대입
    		stu2 = stu1;
    		stu2.age = 10;
    		System.out.println(stu1);
    		System.out.println(stu2);
    		
    		/*
    		 * 원래 stu2가 가리키고 있던 인스턴스는 쓰레기 객체가 됨
    		 * gc(garbage collector)가 쓰레기 객체를 수집하여 소멸시킴
    		 */
    	}
    }

     

     

    public class Monitor {
    	// 멤버 변수 (필드)
    	String color;			// 모니터의 색상
    	int channel;			// 채널
    	int volume;				// 볼륨
    	boolean power;			// 전원(on/off)
    
    	// 멤버 메서드
    	// 모니터를 켜거나 끄는 기능을 하는 메서드
    	public void power() {
    		if(!this.power) {
    			System.out.println("모니터가 켜졌습니다.");
    			this.power = !power;
    		}
    		else {
    			System.out.println("모니터가 꺼졌습니다.");
    			this.power = !power;
    		}
    	}
    	
    	public void channelUp() {
    		this.channel++;
    		System.out.println("현재 채널 : " + this.channel);
    	}
    	
    	public void channelDown() {
    		System.out.println("현재 채널 : " + (--this.channel));
    	}
    	
    	public void volumeUp() {
    		System.out.println("현재 볼륨 : " + (++this.volume));
    	}
    	
    	public void volumeDown() {
    		System.out.println("현재 볼륨 : " + (--this.volume));
    	}
    }
    
    
    public class MonitorTest {
    	public static void main(String[] args) {
    		
    		Monitor monitor = new Monitor();
    		System.out.println(monitor);
    		
    		monitor.power();
    		monitor.power();
    		monitor.power();
    		
    		monitor.channel = 5;
    		monitor.channelUp();
    		monitor.channelUp();
    		monitor.channelDown();
    		monitor.channelDown();
    		
    		monitor.volumeUp();
    		monitor.volumeUp();
    	}
    }

    댓글