728x90

참조형 매개변수

변수의 값을 읽고 변경할 수 있다.

반환 타입이 참조형일 경우 복사한 객체의 주소를 반환한다.

 

인스턴스 메서드

인스턴스 생성 후, 참조 변수. 메서드 이름()으로 호출

인스턴스 맴버와 관련된 작업을 하는 메서드

메서드 내에서 인스턴스 변수 사용 가능

 

static 메서드(클래스 메서드)

객체 생성 없이 클래스 이름. 메서드 이름()으로 호출

ex) Math.random() 등

인스턴스 멤버와 관련 없는 작업을 하는 메서드

메서드 내에서 인스턴스 변수 사용불가

 

static은 언제 붙여야 할까?

속성(멤버 변수) 중에서 공통 속성에 static 붙인다.

인스턴스 멤버를 사용하지 않는 메서드에 static 붙인다.

 

오버로딩

하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것

 

오버로딩이 성립하기 위한 조건

  1. 메서드 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 반환 타입은 영향 없다.

오버로딩의 올바른 예 - 매개변수는 다르지만 같은 의미의 기능 수행

 

생성자

인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드

이름이 클래스와 같아야 한다.

클래스 이름(타입 변수명, 타입 변수명, ...) {
	// 인스턴스 수행될 코드,
    // 주로 인스턴스 변수의 초기화 코드를 적는다.
}

생성자 this()

생성자에서 다른 생성자 호출할 때 사용

같은 클래스의 다른 생성자 호출 시 첫 줄에서만 사용 가능

 

참조변수 this

인스턴스 자신을 가리키는 참조변수

인스턴스 메서드(생성자 포함)에서 사용 가능

지역변수와 인스턴스 변수를 구분할 때 사용


상속

기존의 클래스로 새로운 클래스를 작성하는 것

두 클래스를 부모와 자식의 관계를 맺어주는 것

자손은 조상의 모든 멤버를 상속받는다.

자손의 멤버 개수는 조상보다 적을 수 없다.

자손의 변경은 조상에 영향을 미치지 않는다.

 

포함관계

포함

클래스의 멤버로 참조 변수를 선언하는 것

작은 단위의 클래스를 만들고 이들을 조합해서 클래스를 만든다.

class Point {
	int x;
    int y;
}
class Circle {
	point c = new Point();
    int r;
}

상속관계 : ~은 ~이다.(is-a)

포함관계 : ~은 ~을 가지고 있다.(has-a)

 

Object 클래스 - 모든 클래스의 조상

부모가 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.

모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다. 

toString(), equals(), hashCode(), ...

 

오버라이딩

상속받은 조상의 메서드를 자신에 맞게  변경하는 것

 

오버라이딩 조건

  1. 선언부(반환 타입, 메서드 이름, 매개변수 목록)가 조상 클래스의 메서드와 일치해야 한다.
  2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

참조변수 super

객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에만 존재

조상의 멤버를 자신의 멤버와 구별할 때 사용

 

super() - 조상의 생성자

조상의 생성자를 호출할 때 사용

조상의 멤버는 조상의 생성자를 호출해서 초기화

생성자의 첫 줄에 반드시 생성자를 호출해야 한다. 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super()를 삽입

 

import문

java.lang 패키지의 클래스는 import하지 않고도 사용 가능

import 패키지명.클래스명;

import 패키지명.*;

 

static import문

static멤버를 사용할 때 클래스 이름을 생략할 수 있게 해 준다.

import static java.lang.System.out;
import static java.lang.Math.*;

class EX {
	public static void main(String[] args) {
    	// System.out.println(Math.random());
        out.println(random());
        
        //System.out.println(Math.PI);
        out.println(PI);
    }
}
728x90
728x90

1. 기본형과 참조형

1bit = 2진수 한자리

1byte = 8bit

기본형

오직 8개 (boolean, char, byte, short, int, long, float, double)

정수형 : byte 1byte, short 2byte, int 4byte, long 8byte

실수형 : float 4byte, double 8byte

논리형 : boolean 1byte

문자형 : char 2byte (java에서는 2바이트 유니코드를 사용하기 때문)

실제 값을 저장

 

참조형

기본형 8개를 제외한 모든 것 (String, System 등)

참조형 변수는 객체의 주소를 저장하기 위한 것

메모리 주소를 저장(4byte : 32bit JVM 또는 8byte : 64bit JVM)

 

2. 조건 연산자

조건식에 결과에 따라 연산 결과를 달리한다.

조건식 ? 식1 : 식2

조건식이 참이면 식1 거짓이면 식2

 

3. for문에 이름을 붙인다.

loop1 : for(int i = 0; i < n; i++) {
	for(int j = 0; j < n; j++) {
		break; → 안쪽 for문만 끝난다.
        break loop1; → loop1이라는 이름이 붙은 반복문이 끝난다.
	}
}

 

4. 객체지향

클래스

정의 : 객체를 정의해 놓은 것

용도 : 클래스는 객체를 생성하는 데 사용

 

객체

정의 : 실제로 존재하는 것, 사물 또는 개념

용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

클래스 객체
제품 설계도 제품
TV 설계도 TV
붕어빵 기계 붕어빵

객체 = 속성(변수) + 기능(메서드)

 

객체 : 모든 인스턴스를 대표하는 일반적 용어

인스턴스 : 특정 클래스로부터 생성된 객체 객체와 인스턴스는 같은 단어

 

1. 객체의 생성
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클레스의 객체를 생성 후, 객체의 주소를 참조변수에 저장  

ex)
TV t;  // TV클래스 타입의 참조변수 t를 선언
t = new TV(); // TV인스턴스 생성한 후, 생성된 TV인스턴스의 주소를 t에 저장

TV t = new TV();

2. 객체의 사용
t.channel = 7; // TV인스턴스의 맴버변수 channel의 값을 7로 한다.
t.channelDown(); // TV인스턴스의 메서드 channelDown()을 호출  

 

5. 객체 배열

객체 배열 == 참조 변수 배열

 

6. 클래스의 정의

클래스 == 데이터 + 함수

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

 

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

class Variables { // 클래스 영역
	int iv;  // 인스턴스 변수
    static int cv; // 클래스 변수(static 변수, 공유변수)
    
    void method() {  // 메소드 영역
    	int lv = 0; // 지역변수    
    }
}
변수의 종류 선언 위치 생성시기
클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수 인스턴스가 생성 되었을 때
지역 변수  클래스 영역 이외의 영역  변수 선언문이 수행 되었을 때

 

8. 클래스 변수와 인스턴스 변수

class Card {
	String kind; // 무늬
    int number;  // 숫자
    
    static int width = 100;  // 폭
    static int height = 250; // 너비
}

Card c = new Card();
// 인스턴스 변수
c.kind = "HEART";
c.number = 5;
// 클래스 변수
Card.width = 200;
Card.height = 300;

 

9. 메서드

메서드의 장점

  • 코드의 중복을 줄일 수 있다.
  • 코드의 관리가 쉽다.
  • 코드를 재사용할 수 있다.
  • 코드가 간결해서 이해하기 쉬워진다.

메서드 작성

  • 반복적으로 수행되는 여러 문장을 메서드로 작성
  • 하나의 메서드는 한 가지 기능만 수행하도록 작성
MyMath mm = new MyMath(); // 1. 먼저 인스턴스를 생성한다.
long value = mm.add(1L, 2L); // 2. 메서드를 호출한다.

long add(long a, long b) {
	long result = a + b;
    return result;  // 반환타입이 void가 아닌 경우, 반드시 return문 필요
}
1. main 메서드에서 메서드 add를 호출한다. 인수 1L과 2L이 메서드 add의 매개변수 a, b에 각각 복사(대입)된다.
2. 메서드 add의 괄호 {} 안에 있는 문장들이 순서대로 실행된다.
3. 메서드 add의 모든 문장이 실행되거나 return문을 만나면, 호출한 메서드(main메서드)로 되돌아와서 이후의 문장들을 실행한다.

 

10. 호출 스택(call stack)

스택 : 밑이 막힌 상자, 위에 차곡차곡 쌓인다.

넣을 때

꺼낼 때

호출 스택

  1. 메서드가 수행에 필요한 메모리가 제공되는 공간
  2. 메서드가 호출되면 호출 스택에 메모리 할당, 종료되면 해제

 

class CallStack {
	public static void main(String[] args) {
    	System.out.println("Hello");
    }
}

아래에 있는 메서드가 위의 메서드를 호출한 것

맨 위의 메서드 하나만 실행 중, 나머지는 대기 중

 

11. 기본형 매개변수

기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only)

참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read & write)

 

 

 

 

728x90

+ Recent posts