자바 = 객체지향 언어
프로그램을 구성하는 요소가 객체이며, 이것이 상호작용 하도록 프로그래밍한다.
클래스
- 객체를 만들기 위한 틀
- 객체를 만들기 위해 반드시 클래스를 먼저 말들어야 한다.
자동차 클래스 생성
- Car.java란 파일을 만든다.
- 저장을 하면 이클립스는 컴파일하여 디스크에 Car라는 클래스를 생성한다.
- 자동차 클래스가 생성되었다고 해서 자동차가 만들어 진것은 아니다.
public class Car{
}
자동차 객체 생성하기 (자동차 만들기)
- new 연산자: new연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령.
- 메모리에 만들어진 객체를 인스턴스(instance)라고도 한다.
- 이렇게 만들어진 객체를 참조하는 변수가 c1 , c2 이다.
- 위의 코드가 실행되면 Car라는 객체가 2개가 만들어지고 각각의 객체를 참조하는 c1과 c2변수가 선언된다
public class CarExam{
public static void main(String args[]){
Car c1 = new Car();
Car c2 = new Car();
}
}
필드(field)
자동차는 자동차 이름, 자동차 번호를 가지고 있고, 자동차는 달리고 멈추는 기능이 있다. 여기에서 가지고 있는 것을 속성이라고 한다. 자바에서는 이러한 속성을 필드(Field)라는 용어로 사용한다.
public class Car{
String name;
int number;
}
Car c1 = new Car();
Car c2 = new Car();
c1.name = "소방차"; //c1이 참조하는 객체의 name을 소방차로 설정
c1.number = 1234; // c1.number = 1234란 c1이 참조하는 객체의 number를 1234 로 설정
c2.name = "구급차" //c2가 가리키는 객체의 name을 구급차로 설정
c2.number = 1004; //c2가 가리키는 객체의 number를 1004로 설정
System.out.println(c1.name);
System.out.println(c1.number);
String name = c2.name; //c2가 참조하는 객체의 name 을 String 타입 변수 name 도 참조하게 한다.
메소드
필드가 물체의 상태라면, 물체의 행동에 해당하는게 메소드다.
car는 앞으로 전진할수도 있고 후진하는 행동을 할 수 있다.
- 메소드는 입력값이 있고, 그 입력값을 받아서 무언가 한 다음 결과를 도출해 내는 수학의 함수와 비슷한 개념이다.
- 이때 입력값을 매개변수라고 하고,결과값을 리턴값이라고 합니다.
- 인자( Argument ) 는 어떤 함수를 호출시에 전달되는 값을 의미한다.
- 매개 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수를 의미한다.
- 메소드란 클래스가 가지고 있는 기능이다. 클래스 안에 선언된다.
반환타입 메서드명(매개변수){
return 반환값;
}
다양한 형태의 메소드
public class MyClass{
// 매개변수와 리턴 값이 없는 메소드
public void method1() {
System.out.println("method1이 실행됩니다.");
}
// 매개변수로 정수를 받고, 리턴값은 없는 메소드
public void method2(int x) {
System.out.println(x + " 를 이용하는 method2입니다.");
}
// 매개변수는 없고, 정수를 리턴하는 메소드
public int method3() {
System.out.println("method3이 실행됩니다.");
return 10;
}
// 매개변수로 정수를 받고, 정수를 리턴하는 메소드
public int method4(int y) {
System.out.println(y + " 를 이용하는 method5입니다.");
return 5;
}
}
메소드 사용
public class MyClass{
public void method(){
System.out.println("method1이 실행됩니다.");
}
public void method2(int x){
System.out.println(x + " 를 이용하는 method2입니다.");
}
public int method3(){
System.out.println("method3이 실행됩니다.");
return 10;
}
public void method4(int x, int y){
System.out.println(x + "," + y + " 를 이용하는 method4입니다.");
}
public int method5(int y){
System.out.println(y + " 를 이용하는 method5입니다.");
return 5;
}
}
public class MyClassExam{
public static void main(String args[]){
MyClass my1 = new MyClass(); //메소드가 정의된 클래스 생성
my1.method1(); //MyClass에서 정의해 놓은 메소드 method1() 를 호출한다.
my1.method2(10);
int x = my1.method3();
System.out.println("method3 이 리턴한 " + x + " 입니다.");
my1.method4(10,100);
int x2 = my1.method5(50);
System.out.println("method5 가 리턴한 " + x2 + " 입니다.");
}
}
참조 타입
- 기본형 타입을 제외한 모든 타입
- 배열도 참조형이고, 클래스도 모두 참조 타입이다.
참조형 변수
- String str = new String("hello");
- str 변수 앞에 기본형 타입이 아닌 String클래스가 적혀있다.
- 이퀄(=)뒤에는 new 다음에 생성자라는 것이 있다.
- new 라는 키워드는 객체를 메모리에 올려준다. 이렇게 메모리에 올라간 객체를 인스턴스라고 말한다.
- 메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스 하는 변수가 str 이다. 참조한다. 레퍼런스 한다라는 것은 변수가 인스턴스를 가지고 있는게 아니라 말그대로 가리킨다는 의미이다.
- str이라는 변수에는 메모리의 위치 값이 저장되는 것이다. 메모리의 위치값이 저장된다고 하더라도, 어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법은 없다. 그렇기 때문에 str변수는 String 인스턴스를 참조한다라고만 아시면 된다.
String 클래스
- 문자열을 표현하는 자바에서 가장 많이 사용하는 클래스
자바 인스턴스 생성 방법
- new연산자를 이용하지 않고 인스턴스를 만드는 경우
- "hello"라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다. 상수는 변하지 않는 값을 의미.
- String str2 = "hello"; 이 문장이 실행될 때에 hello 라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조한다.
String str1 = "hello";
String str2 = "hello";
- new연산자를 이용해서 인스턴스를 만드는 경우
- new연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.
- String str4 = new String("hello"); 이 문장이 실행될때도 새롭게 만들게 되므로, str3 과 str4는 서로 다른 인스턴스를 참조한다.
String str3 = new String("hello");
String str4 = new String("hello");
문자열 비교
- 참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교한다.
- 두 문자열이 같은 값인지는 equals 메소드를 사용한다
if(str1 == str2){ // 같은 인스턴스를 참조하므로 결과는 true
System.out.println("str1과 str2는 같은 레퍼런스입니다.");
}
if(str1 == str3){ // str1과 str3은 서로 다른 인스턴스를 참조하므로 결과는 false
System.out.println("str1과 str3는 같은 레퍼런스입니다.");
}
if(str3 == str4){ // str3과 str4는 서로 다른 인스턴스를 참조하므로 결과는 false
System.out.println("str3과 str4는 같은 레퍼런스입니다.");
}
String str1 = new String("hello");
if(str1.equals("hello"))
System.out.println("str1은 hello와 같습니다.");
String Class가 제공하는 메소드
String str = new String("hello");
// 문자열 길이 구하기
System.out.println(str.length()); // 5
// 문자열 붙히기
System.out.println(str.concat(" world")); // hello world
System.out.println(str); // hello
// 문자열 자르기
System.out.println(str.substring(1, 3)); // el
System.out.println(str.substring(2)); // llo world
'Java > 강의' 카테고리의 다른 글
[📃 자바 입문] 배열 (0) | 2025.05.01 |
---|---|
[📃 자바 입문] 반복문 (0) | 2025.05.01 |
[📃 자바 입문] 조건문 (1) | 2025.04.30 |
[📃 자바 입문] 연산자 (0) | 2025.04.30 |
[📃 자바 입문] 기본형 타입과 타입(형)변환 (0) | 2025.04.30 |