반응형

# 클래스 맴버와 인스턴스 맴버

  • 맴버는 구성원으로서, 객체도 변수, 메소드라는 구성원이 존재한다.

# 클래스 변수 와 인스턴스 변수

  • 인스턴스 변수 : 인스턴스마다 다른 값을 가지는 변수
  • 클래스 변수 : 해당 클래스에 따라 만들어진 모든 인스턴스들은 클래스가 가지고있는 변수의 값을 자연스럽게 갖게 된다.
  • static : static을 맴버(변수, 메소드) 앞에 붙이면 클래스의 맴버(클래스 변수)가 된다.
  • 클래스 변수의 사용 용도 : 인스턴스에 따라 변하지 않는 값이 필요한 경우(PI), 인스턴스를 생성할 필요 없는 값을 클래스에 저장하고 싶은 경우, 값의 변경 사항을 모든 인스턴스가 공유해야 하는 경우
class Calculator2 {
    static double PI = 3.14;
    // 클래스 변수인 base가 추가되었다.
    static int base = 0;
    int left, right;

    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
    }

    public void sum() {
        // 더하기에 base의 값을 포함시킨다.
        System.out.println(this.left + this.right + base);
    }

    public void avg() {
        // 평균치에 base의 값을 포함시킨다.
        System.out.println((this.left + this.right + base) / 2);
    }
}

class Main {

    public static void main(String[] args) {
        Calculator2 c1 = new Calculator2();
        c1.setOprands(10, 20);
        // 30 출력
        c1.sum();

        Calculator2 c2 = new Calculator2();
        c2.setOprands(20, 40);
        // 60 출력
        c2.sum();

        // 클래스 변수 base의 값을 10으로 지정했다.
        Calculator2.base = 10;

        // 40 출력
        c1.sum();

        // 70 출력
        c2.sum();
    }
}

 

 

반응형
반응형

# 객체화

  • 객체 지향의 핵심은 연관되어 있는 변수와 메소드를 하나의 그룹으로 묶어 그룹핑하는 것이다. 

## 계산기 객체를 이용한 연산

  • 객체는 마치 하나의 독립된 프로그램으로 볼 필요가 있다. (객체는 프로그램 안에 있는 작은 프로그램이다.)
  • 그리고 그 프로그램 안에는 변수와 메소드 등이 존재, 메소드의 집합이 곧 객체이다.
public class Calculator {
	int left;
	int right;
	public void setOperands(int left, int right) {
		this.left = left;
		this.right = right;
	}
	public void sum() {
		System.out.println(this.left + this.right);
	}
	public void avg() {
		System.out.println((this.left + this.right)/2);
	}
}
    
public class Main {
	public static void main(String[] args) {
    	
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();
        
        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();
        c2.avg();
        
    }
}

## 클래스(설계도) 와 인스턴스(제품)

  • 클래스 : 클래스는 일종의 설계도이며, 클래스를 정의하는 것 자체로 할 수 있는 일은 많지 않다. 설계도를 구체적인 제품으로 만들어야 하는데, 그 때 사용하는 키워드가 new 이다.
  • 인스턴스 : new Calculator()은 클래스 Calculator를 구체적인 제품으로 만드는 명령어이다. 이렇게 만들어진 구체적인 제품(객체)을 인스턴스라고 부른다.
  • 객체는 상태와 행위의 집합. ( 변수는 상태(state), 메소드는 행위(행동, behave) )
public class Calculator {
	int left;
	int right;
	public void setOperands(int left, int right) {
		this.left = left;
		this.right = right;
	}
	public void sum() {
		System.out.println(this.left + this.right);
	}
	public void avg() {
		System.out.println((this.left + this.right)/2);
	}
}

public class Main {
	public static void main(String[] args) {
    	
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();
        c1.avg();
        
        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();
        c2.avg();
        
    }
}


*class Calculator 에서 class 란?
=> Calculator라고 하는 객체의 설계도를 컴퓨터에게 알려주겠다는 것을 의미로 약속되어있는 키워드.

* this.left, this.right 에서 this 란?
=> Calculator를 정의할 때 정의한 변수를 의미. 즉 this란 그 인스턴스 자신을 의미
반응형
반응형

# 객체 지향 프로그래밍 (Object-Oriented Programming)

  • 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다.
  • 이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다.

## 추상화 (abstract)

  • 복잡한 자료, 모듈, 시스템 등으로부터 중요한 부분을 단순화 시키는 것

## 부품화

  • 좋은 객체를 만든다는 것은 로직을 재활용 가능하도록 부품화 하는 것이라고 할 수 있다.
  • 객체지향은 부품화의 정점이라고 할 수 있다. 메소드는 부품화의 예로서 메소드를 사용할 경우 코드의 양을 극적으로 줄일 수 있고, 메소드 별로 기능이 분류되어 있어 필요한 코드를 찾기 쉽고 문제의 진단도 빨라진다.

## 은닉화, 캡슐화

  • 내부의 동작 방법을 단단한 케이스(객체) 안에 숨기고, 사용자에게는 그 부품(메소드)의 사용방법만을 노출하고 있는 것으로, 이러한 것을 정보의 은닉화, 캡슐화라고 한다.

## 인터페이스

  • 잘 만들어진 부품이라면 부품과 부품을 서로 교환 할 수 있어야 한다.
  • 장치와 장치를 연결하기 위해서는 규격이 표준화 되어 있어야 하고, 장치와 장치를 연결하는 연결점을 인터페이스라고 한다.
반응형
반응형

# 앱 실행중 데이터 입력

## Scanner 이용하여 입력받기

import java.util.Scanner;

publuc class Main {
	public static void main(String[] args) {
    
    	Scanner sc = Scanner(System.in);
        
        int num = sc.nextInt();
        
        System.out.println(i * 1000);
        sc.close();
    }
}

## hasNextInt 이용하여 입력받기

  • while문을 이용해서 반복적으로 입력받기.
  • 사용자가 입력한 값이 int 형인경우 true, int 형이 아닌 경우 false를 리턴하여 프로그램이 종료된다.
import java.util.Scanner;

class Main {
  public static void main(String[] args) {
  
    Scanner sc = new Scanner(System.in);
    
    while (sc.hasNextInt()) {
    	System.out.println(sc.nextInt()*1000);
    }
	sc.close();
  }
}

 

# 여러 형태의 입출력

## 파일을 이용하여 입력받기

import java.util.Scanner;
import java.io.*;

class Main {
  public static void main(String[] args) {
    try {
        File file = new File("input.txt");
        //input.txt에 입력된 값을 받는다.
        Scanner sc = new Scanner(file);
        while(sc.hasNextInt()) {
            System.out.println(sc.nextInt()*1000);
        }
        sc.close();
    } catch(FileNotFoundException e){
        e.printStackTrace();
    }
  }
}
반응형

+ Recent posts