본문 바로가기

자바

Day04

OOP - [Object Oriented Programing] :객체지향 언어 - 상속 , 캡슐화 , 추상화 개념을 중심으로 점차 발전되었고 1960년대 최초 객체지향 언어인 시뮬라(Simula) 가 탄생하였다. 

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

2. 코드의 관리가 용이하다 - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 하지만 코드가 길어지는 단점이 있다.

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

☆ 객체 지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지를 고민하여 점차 개선해 나가야한다! 

Class 와 객체 : 클래스란 - 객체를 정의해 놓은 것이며 ,객체를 생성하는데 사용된다.

객체란 - 실제로 존재하는 것,사물 또는 개념으로 객체가 가지고 있는 기능과 속성에 따라 다르다.

ex) Student라는 클래스에 나이,이름,사는 곳 등등 객체가 가지고 있는 속성과 기능을 정의해 놓은 것이다.

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

객체에는 멤버변수[속성], 메서드[기능] 의 두 종류의 구성요소로 이루어져 있다.

 

클래스를 사용하기 위해선 인스턴스를 생성해야 사용할 수 있다.

 

인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.

 

같은 클래스로 부터 생성되었을지라도 각 인스턴스의 속성[멤버변수]은 서로 다른 값을 유지할 수 있으며 메서드의 내용은 모든 인스턴스에 대해 동일하다. 

 

객체 역시 배열로 다루는 것이 가능하고, 이를 '객체 배열'이라고 한다. 하지만 객체 배열 안에 객체가 저장되는 것은 아니고, 객체의 주소가 저장된다. 객체를 생성해서 객체 배열의 각 요소에 저장하는 것을 잊지말자!

 

변수는 클래스 변수,인스턴스 변수, 지역변수 3종류가 있다. 변수의 종류를 결정짓는 중요한 요소는 '변수의 선언된 위치'이므로 어느 영역에 선언되었는지를 확인하는 것이 중요하다.

1.클래스 변수[class variable] : 인스턴스 변수 앞에 static을 붙이기만 하면된다. 모든 인스턴스가 공통된 저장공간[변수]을 공유하게 된다.

공통적인 값을 유지해야 하는 속성의 경우, 클래스변수를 사용한다.

2.인스턴스 변수[instance variable]: 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 그렇기 때문에 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다. 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 상태를 유지해야 하는 속성의 경우, 인스턴스 변수로 선언한다.

3.지역 변수[local variable] : 매서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없게 된다. 블럭{}내에서만 사용이 가능하고 블럭을 벗어나면 사용할 수 없게 된다.

 

※메서드 : 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다. 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다. // 메서드를 사용하는 이유 1.높은 재사용성[reusability] 2.중복된 코드의 제거 3.프로그램의 구조화

메서드의 선언 : 선언부와 구현부로 이루어져 있는데 선언부에는 '메서드의 이름'과 '매개변수 선언' 그리고 '반환타입'으로 구성되어 있다. 반환타입에는 작업수행 결과[출력]인 '반환값'[return value]의 타입을 적게 되는데 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 한다. +return문은 단 하나의 값만 반환할 수 있는데, 메서드로의 입력[매개변수]은 여러 개일 수 있어도 출력[반환값]은 최대 하나만 허용하는 것이다.  단 반환값이 없는 경우 반환타입으로 'void'를 적어야한다. 

메서드의 호출 : 메서드를 정의했어도 호출되지 않으면 아무 일도 일어나지 않는다. 메서드를 호출할 때 괄호()안에 지정해준 값들을 '인자[argument]' 또는 '인수' 라고 하는데 인자의 개수와 순서는 호출된 메서드에 선언된 매개변수와 일치해야 한다. 

기본형 매개변수와 참조형 매개변수

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

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

package com.workshop;
class Data{ int x;}
public class Sample18 {

	public static void main(String[] args) {
		Data d = new Data();
		d.x = 10;
		System.out.println(d.x);
		
		change(d.x);
		// 호출이 끝나고 매개변수 x가 스택에서 제거되기 때문에 10이 출력
		System.out.println(d.x);

	}
     // int x 대신 참조형 매개변수를 Data d 바꾸게 된다면 값이 아닌 '값이 저장된 주소를 
     // change 메소드에 넘겨주기때문에 값을 읽어오는 것뿐만 아니라 변경하는 것도 가능하다.
	static void change(int x) { //기본형 매개변수
		x = 1000;
		System.out.println(x);
	}
}

-클래스 변수는 인스턴스를 생성하지 않아도 사용할 수 있다.

static 이 붙은 변수[클래스 변수]는 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기 대문에

 

System.exit(0); : 강제적으로 JVM을 종료시키고 싶을 때는 System 클래스의 exit() 메소드를 호출하면 된다. exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시키는 역할을 한다. 정상적 호출값은 '0'으로 주면된다.

Thread.sleep(1000); : 실행중인 스레드를 잠시 멈추게 하고 싶다면 Thread 클래스의 정적 메소드인 sleep() 메소드를 사용하면 된다. Thread.sleep()메소드를 호출한 스레드는 주어진 시간 동안 일시 정지 상태가 되고 다시 실행 대기 상태로 돌아간다. 기본단위는 ms로 1000ms = 1s이다.

pass by reference : 인자를 전달한다= call by reference :함수를 호출한다 = input,output :

 


그 밖의 하면서 발생했던 오류코드들 : 1. Eclipse Code Recommenders 란?
 Recommenders는 소스 코드에 숨겨진 정보를 이용해 Java 개발자가 새로운 API를 사용하고 확장하는 방법을 학습 할 수 있도록 지원한다.

2.java.util.InputMismatchException : 1)입력한 수가 데이터 형과 맞지 않거나 2)데이터 형의 범위를 넘을 경우 발생한다.

 

 

 


아직 갈길이 멀다 메서드와 클래스 ,객체를 잘 활용하여 중복되는 코드를 피하고 가독성 높은 코드를 만들 수 있도록 노력하자!

'자바' 카테고리의 다른 글

Day05  (0) 2021.05.10
1주차 예제를 통한 간단한 복습  (0) 2021.05.09
Day03  (0) 2021.05.06
Day2  (0) 2021.05.04
자바 Day1  (0) 2021.05.03