haju__log

DAY 6 본문

JAVA 기초

DAY 6

haju 2023. 3. 24. 21:11
반응형

✅ 객체지향 언어

  • 프로그램을 구성하는 요소는 객체이며, 이것이 상호작용 하도록 프로그래밍 한다.
  • 자바는 객체를 만들기 위해서는 반드시 클래스를 먼저 만들어야 함

▶ 클래스

  • 객체를 만들기 위한 틀

 

▶ 클래스 선언

public class 클래스명{
...
}

public class Car{

}
  • Car.java란 파일을 먼저 만들기
  • 저장하면 이클립스는 컴파일 후 디스크에 Car라는 클래스를 생성함
  • Car 클래스가 생성되었다고 해서 자동차가 만들어진 것 X

▶ Car 객체 생성(자동차 만들기)

public class CarExam{
	public static void main(String args[]){
    		Car c1 = new Car();
        	Car c2 = new Car();
  	}
}
  • new 연산자 : new 연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령
  • 메모리에 만들어진 객체를 인스턴스(instance)라고도 함
  • 이렇게 만들어진 객체를 참조하는 변수가 c1,c2
  • 위 코드 실행시, Car라는 객체가 2개가 만들어지고, 각각의 객체를 참조하는 c1, c2변수가 선언됨

✅ 참조타입

  •  참조형 타입은 기본형 타입을 제외한 모든 타입
기본형 타입 참조형 타입
논리형 boolean 기본형 타입을 제외한 모든 타입
문자형 char
정수형 byte, short, int, long
실수형 float, double
String str = new String("hello");
  • str 변수 앞에 기본형 타입이 아닌 String 클래스가 적힘
  • =(이퀄) 뒤에는 new 다음에 생성자가 옴
  • new 라는 키워드 : 객체를 메모리에 올려준다. 이렇게 메모리에 올라간 객체를 인스턴스라 부름
  • 메모리에 올라간 인스턴스를 가리키는 변수 == 참조하는 변수 == 레퍼런스 하는 변수 == str
  • str 이라는 변수에는 메모리의 위치 값이 저장됨 
  • 메모리에 위치값이 저장되더라도 어떤 메모리에 저장되는지 정보를 알 수 없음.
  • 그래서 str 변수는 String 인스턴스를 참조한다라고 알면 된다.
  • 앞으로 배울 클래스들은 모두 참조형

✅ String 클래스 

  • 문자열을 표현함
  • 자바에서 가장 많이 사용하는 클래스
  • 모든 클래스들은 new 연산자를 이용해야지만 실제 인스턴스를 만들 수 있는데 String만 유일하게 없어도 가능함.

 

자바 인스턴스 생성 방법

1. new 연산자를 이용하지 않고 인스턴스 만들기

String str1 = "hello";
String str2 = "hello";

// str1과 str2은 같은 인스턴스를 참조하므로 결과는 true라, if문의 실행문 실행
if (str1 == str2)
	System.out.println("str1과 str2는 같은 레퍼런스입니다.");
  • new 연산자를 이용하지 않고 만들면 hello 라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장
  • 이때, 상수는 변하지 않는 값을 의미!
  • String str2 = "hello"; 이 문장이 실행될 때 hello라는 문자열 상수가 이미 만들어져 있기 때문에
  • str1 이 참조하는 인스턴스를 str2도 참조한다.
  • 메모리를 아낄 수 있다.

2. new 연산자를 이용해서 인스턴스 만들기

String str3 = new String("hello");
String str4 = new String("hello");

// str3과 str4은 서로 다른 인스턴스를 참조하므로 결과는 false라, if문의 실행문 실행 X
if(str3 == str4){  
    System.out.println("str3과 str4는 같은 레퍼런스입니다.");
}
  • new 연산자를 이용해서 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.
  • str3과 str4는 서로 다른 인스턴스를 참조!
  • str1과 str3도 서로 다른 인스턴스를 참조함!

 

  • String 은 불변 클래스이다.
  • 불변 : String이 인스턴스가 될 때, 가지고 있던 값을 나중에 수정할 수 없다.
  • String은 문자열과 관련된 다양한 메소드를 가짐 : 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.
  • String이 가지고 있는 메소드 중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
String str5 = "hello world";
String str6 = str5.substring(3);
System.out.println(str6);
  • substring은 문자열을 자른 결과를 반환하는 메소드 : 코드가 실행되어도 str5는 변하지 않음
  • str6은 str5의 문자열 중 3번째 위치부터 자른 결과, 새로운 String을 참조함

필드(field)

  • 자동차는 자동차 이름, 자동차 번호를 가지고 있고, 자동차는 달리고 멈추는 기능이 있다.
  • 여기서 가지고 있는 것을 속성이라고 함. 자바에서는 속성을 필드라는 용어로 사용함

  • 이름과 번호를 필드로 가지고 있는 Car 클래스 선언
//Car.java 파일

public class Car {
	//타입 필드명
	String name;
	int number;
}

 

  • Car 클래스를 인스턴스화 하고 속성 이용하기
  • 참조 변수 다음에 나오는 점(dot)은 참조변수가 참조하는 객체가 가지고 있는 것을 사용할 때 사용함
  • EX> c1.name="소방차"; 는 c1이 참조하는 객체의 name을 소방차로 설정한다는 뜻
public static void main(String[] args) {
//Car라는 인스턴스가 메모리에 2개 만들어짐. 객체별로 name과 number라는 속성을 가짐.
    Car c1 = new Car();
    Car c2 = new Car();

    c1.name="소방차";
    c1.number=1234;

    c2.name="구급차";
    c2.number=1111;

    System.out.println(c1.name);
    System.out.println(c1.number);
}

✅ 메소드 (Method)

  • 필드가 물체의 상태라면, 물체의 행동에 해당하는 게 메소드다.
  • car에 이름과 번호가 있지만(field), car는 전진, 후진 등 행동(Method)을 할 수 있다.
  • 즉, 메소드 = 클래스가 가지고 있는 기능

 

  • 메소드는 입력값이 있고, 그 입력값을 받아서 무언가 한 다음, 결과를 도출해내는 수학의 함수와 비슷한 개념
  • 이 때, 입력값을 매개변수(=인자라고도 함), 결과값을 리턴값이라고 함.
    • 인자와 매개변수의 조금의 차이
    • 인자(Argument) : 어떤 함수를 호출 시에 전달되는 값을 의미
    • 매개변수(Parameter) :  그 전달된 인자를 받아들이는 변수를 의미
  • 메소드란 클래스가 가지고 있는 기능으로, 클래스 안에 선언된다.

✅ 메소드(Method) 선언

  • 다양한 형태의 메소드 만들어보기
  • 메소드 선언 방법 : public 리턴타입 메소드명 (매개변수 등){ 구현내용 ..}
  • 리턴하는 것이 없을 경우 리턴타입은 void로 설정

//MyClass.java 파일
public class MyClass {
	//public 리턴타입 메소드명 (매개변수 등 ){ 구현}
	
    	//method1 : 매개변수와 리턴이 없는 형태의 메소드
	public void method1() {
		System.out.println("m1이 실행됨...");
	}
	
    	//method2 : 정수를 받아들인 후, 리턴하지 않는 메소드
	public void method2(int x) {
		System.out.println(x + "를 이용한 m2가 실행됨...");
	}
    
    	//method3 : 아무것도 받아들이지 않고, 정수를 반환하는 메소드	
        //리턴하는 값 앞에 return 이라는 키워드를 사용
        //메소드 이름 앞에는 리턴하는 타입을 적기
        //리턴타입은 하나만 사용 가능, 리턴하는 타입은 어떤 타입이라도 상관없음
	public int method3() {
		System.out.println("m3이 실행됨...");
		return 10;
	}
    
    	//method4 : 정수를 2개 매개변수로 받고, 아무것도 반환하지 않는 메소드	
	public void method4(int x, int y) {
		System.out.println(x+y+"m4이 실행됨...");
	}
    
    	//method5 : 정수를 한개 받아들인 후, 정수를 반환하는 메소드
	public int method5(int y) {
		System.out.println(y+"m5가 실행됨...");
		return y*2;
	}
}

메소드 사용해보기

  • 메소드를 사용하기 위해서는 메소드가 정의된 클래스인 MyClass가 이미 생성되어 있어야 함.
  • 메소드 사용할 때 : 생성된 클래스를 참조하는 레퍼런스변수. 메소드명() 으로 사용
//MyClassExam.java 파일
public class MyClassExam {

	public static void main(String[] args) {
    		//메소드가 정의된 클래스 생성하기
		MyClass myclass = new MyClass();
        
        	//MyClass에서 정의해 놓은 method1을 호출
		//method1 사용하기
		myclass.method1();
		
		//method2 사용하기
		myclass.method2(10);
		
		//method3 사용하기
		int value = myclass.method3();
		System.out.println(value);
		
		//method4 사용하기
		myclass.method4(5, 10);
		
		//method5 사용하기
		int value2 = myclass.method5(55);
		System.out.println(value2);
	}

}

 

 

반응형

'JAVA 기초' 카테고리의 다른 글

DAY 5  (0) 2023.03.21
DAY 4  (0) 2023.03.20
DAY 3  (0) 2023.03.18
DAY 2  (0) 2023.03.14
[eclipse/이클립스] 레이아웃 초기화하기, 레이아웃 기존 창 없어짐  (0) 2023.03.14