반응형
*(필자가 이해한 내용을 바탕으로 쓰는 글입니다. 틀린 부분이 있을 수 있고, 미흡한 부분이 있을 수 있습니다.)*
객체지향 언어에 대해 공부를 하다 보니 문득 클래스의 개념이 정확히 무엇인가에 의문을 품어 공부를 해보았다.
일단 클래스는 필드와 메소드로 구성이 된다.
*필드 = 클래스에 포함된 변수
*메서드 = 명령문이 모인 집합체
클래스는 이러한 객체들을 정의하는 틀로 쓰인다고 한다.
클래스를 잘 설명하는 사진을 가지고 왔다.
이제 코드로 이해해보자.
일단 클래스를 만든다.
package Class;
public class Student {
}
큰 틀인 클래스 Student를 생성했다.
이제 메인을 추가하자.
package Class;
public class Student {
public static void main(String[] args) {
}
}
그러면 객체를 만들어 보자.
package Class;
public class Student {
String name; //객체 변수
public static void main(String[] args) {
Student std = new Student(); //객체
std.name = "abcdefg"; //객체 변수를 이용한 이름설정
System.out.println(std.name);
}
}
객체 변수인 name(String)을 선언해 주었고 메인 안에 객체 std를 선언하였다.
이후 객체 std에서 객체 변수인 name에 접근해 이름을 설정해 주었다.
이제 메서드를 넣어보자.
package Class;
public class Student {
String name; //객체 변수
public void setName(String name){ //메소드
this.name = name; // Student std = new Student() 의 std에서 setName을 호출 헀기에 this = std,즉 this.name(Student의 name) = std.name(setName의 매개변수)
}
public static void main(String[] args) {
Student std = new Student();
std.name = "abcdefg"; //객체 변수를 이용한 이름설정
System.out.println(std.name);
std.setName("ggs"); // 메소드를 이용한 이름설정
System.out.println(std.name);
}
}
객체 std에서 setName이라는 메소드를 호출하여 이름을 설정해 주었다.
이러한 클래스에서 가장 중요한 것이 객체 변수가 공유되지 않는다는 점이다.
package Class;
public class Student {
String name; //객체 변수
public void setName(String name){ //메소드
this.name = name; // Student std = new Student() 의 std에서 setName을 호출 헀기에 this = std,즉 this.name(Student의 name) = std.name(setName의 매개변수)
}
public static void main(String[] args) {
Student std = new Student();
Student student = new Student();
std.name = "abcdefg"; //객체 변수 를 이용한 이름설정
student.name = "gfedcba";
System.out.println(std.name);
System.out.println(student.name);
}
}
이런 식으로 객체 변수를 2번 사용한 뒤 출력하면
각각 설정한 이름으로 나오는 것을 확인할 수 있다.
이로써 객체 변수가 공유되지 않는다는 것을 확인했다.
이처럼 객체 변수의 값은 독립적으로 유지가 된다는 점을 클래스의 존재의 이유라고 하기도 한다.
이렇게 클래스에 대해 공부해 보았다.
반응형
'언어 공부 > Java' 카테고리의 다른 글
[JAVA] 람다식의 개념과 사용법 (0) | 2021.10.07 |
---|---|
[JAVA] Replace(문자열 치환) 에 대하여 (0) | 2021.10.05 |
객체지향 프로그래밍 (0) | 2021.09.16 |
JAVA 메소드의 개념 (0) | 2021.09.14 |
자바 extends와 implements 에 대해 (0) | 2021.09.07 |