230320 - java(5)

팝콘·2023년 3월 21일

Java

목록 보기
4/17

1. 객체지향 언어의 장점

1) 코드의 재사용성이 높다.
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

2) 코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3) 신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.


2. 클래스와 객체

  • 은유적으로 쉽게 설명하자면 클래스는 '설계도'이고 객체는 '제품'이다.

  • 클래스
    정의 : 객체를 정의해 놓은 것
    용도 : 객체를 생성하는데 사용

변수 < 배열 < 구조체 < 클래스

변수 : 하나의 데이터를 저장할 수 있는 공간
배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
클래스 : 데이터와 함수의 결합(구조체 + 함수)

  • 객체(인스턴스)
    정의 : 실제로 존재하는 것. 사물 또는 개념을 뜻한다.
    용도 : 객체가 가지고 있는 기능과 속성에 따라 다르다.
	객체 생성 하는 법
	Tv t = new Tv();
    Tv[] arr = new Tv[3];	//객체 배열 생성

클래스 ---(인스턴스화)---> 인스턴스(객체)


3. 속성과 기능

  • 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 즉, 객체(인스턴스)는 속성과 기능의 집합이라고 할 수 있다.
  • 객체가 가지고 있는 속성과 기능을 그 객체의 멤버라고 한다.

속성

  • 멤버변수
  • 예) 크기, 길이, 높이, 색상, 볼륨, 채널 등

기능

  • 메소드
  • 예) 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등
class Tv {
	String color;
    boolean power;
    int channel;
    // 속성(=변수)
    
    void power() {power = !power;}
    void channerlUp() {channel++;}
    void channelDown() {channel--;}
    // 기능(=메소드)
}

4. 선언위치에 따른 변수의 종류

clss Variables {
	int iv;				// 인스턴스 변수
    static int cv;		// 클래스 변수(static 변수, 공유변수)   
    
    void method() {
    	int lv = 0;		// 지역변수
    }
}

인스턴스 변수(iv)

  • 클래스 영역에 선언되며 인스턴스를 생성할 때 만들어진다.
  • 값을 읽어오거나 저장하려면 먼저 인스턴스를 생성해야한다.
  • 인스턴스마나다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 없다.

클래스 변수(cv)

  • 인스턴스 변수 앞에 static만 붙이면 클래스 변수가 된다.
  • 모든 인스턴스가 하나의 저장공간을 공유하기 때문에 항상 공통된 값을 갖는다. 따라서 공통적인 값을 유지해야하는 경우 클래스 변수로 선언한다.
  • 인스턴스를 생성하지 않고도 바로 사용할 수 있다.
  • static이 붙은 변수(클래스 변수)는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성된다.
  • < 클래스이름.클래스 변수 >와 같은 형식으로 사용한다.

지역변수(lv)

  • 메서드 내에 선언되어 메서드 내에서만 사용 가능하며 메서드가 종료되면 소멸되어 사용할 수 없다.
class Card {
	String kind;				// 무늬
    int number;					// 숫자
    
    static int width = 100;		// 폭
    static int height = 250;	// 높이
}

- 한 카드의 width, heigt을 변경해도 모든 카드의 값이 변경된다.

public class Sample {
	int x

- 멤버변수, 인스턴스 변수, 프로퍼티, 필드
- 클래스의 구성요소 중 한다.
- 생성된 객체에 포함되어 있다.
- 객체가 유지되는 동안(그 객체를 참조하고 있는 동안) 변수 값도 유지된다.
- 객체가 생성될 때 멤버변수는 해당 타입의 기본값으로 초기화된다.


	public static void main(String[] args) {
		int y = 0;	
    
    - 지역변수, 로컬변수
	- 메소드 내부에서 선언된 변수다.
	- 해당 메소드가 실행되는 동안 사용할 수 있다.
	- 변수가 선언된 블록이 종료되면 변수가 사라진다.
	- 변수를 생성할 때 자동으로 초기화되지 않는다.

		if (y == 0) {
			int z = 100;
        - 지역변수, 로컬변수
		- if블록이 종료되면 이 변수도 사라진다.
		- if블록 밖에서 사용할 수 없다.
		- 변수를 생성하면 자동으로 초기화되지 않는다.
		}
	}
}


Score[] scores = new Score[3];
- new Score[3]는 Score객체를 3개 저장할 수 있는 배열객체를 생성한 것이다.
scores —→ [null, null, null]


Score score = new Score();
- new Score()는 Score 설계도로 Score객체를 생성하는 것이다.
- score 참조변수는 Score객체를 참조하고 있다.
score –→ Score객체


Score score1 = new Score();
Score score2 = null;
System.out.println(score1.studentNo);
System.out.println(score2.studentNo);	
// 값이 null이기 때문에 오류

Score[] scores = new Score[3];
Score score = scores[0];			
// score[0]번째에는 null이 저장되어 있다. score도 null이 저장되므로 오류

System.out.println(score.studentName);
profile
터짐

0개의 댓글