haju__log
DAY 6 본문
반응형
✅ 객체지향 언어
- 프로그램을 구성하는 요소는 객체이며, 이것이 상호작용 하도록 프로그래밍 한다.
- 자바는 객체를 만들기 위해서는 반드시 클래스를 먼저 만들어야 함
▶ 클래스
- 객체를 만들기 위한 틀
▶ 클래스 선언
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);
}
}
반응형