일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Swift
- persistentStoreCoordinator
- 트레일링 클로저
- expensive operation
- NSSortDescriptor
- iOS Static Library 사용하는방법
- 다익스트라 이해
- 일급 객체
- NSManagedObject SubClass
- leetcode #01
- 1009번
- iOS Static Library
- CoreData
- CoreData Filter
- NSPredicates
- CoreData Concurrency
- Raw value and Associated value
- Persistent store Coordinator
- codability
- dateFormatter
- 스위프트 클로저
- Swift LinkedList
- Associated Value
- CoreData Stack
- LightWeight Migration
- Swift closure
- Java
- Clean swift
- Swift 고차함수
- 2022 부스트캠프
- Today
- Total
하루를살자
생성자 (Constructor) 와 Getter, Setter 본문
Constructor (생성자)
생성자 는 자바서 특별하게 사용되는 기법으로, Class 선언 할 시에 초기 맴버 의 값을 미리 지정하여 객체 화 될 시에 미리 지정되어 있던 값이나, 로직을 통해서 구현이 된다. 컴파일 시, Java complier 가 객체 가 instance 화 되는 코드를 따라, class 소스 파일을 읽고, 만약 아무런 생성자가 없을시에 Default Constructor (기본 생성자) 라는 것을 만든다. 이 기본 생성자 는 아래와 같이 쓰일 수 있는데, 만약 해당 클래스 가 기본 생성자 외 다른 생성자 가 필요 없을 시에는 기본 생성자 명시 를 안해도 상관이 없다.
public class Student {
String subject;
int stduent_num;
//기본 생성자, 굳이 명시할 필요없음
public Student(){
}
}
this 사용법
this 는 생성자 를 명시할때 해당하는 클래스의 맴버 변수 의 초기값을 설정해줄때 쓰인다.
- Student.java
public class Student {
String subject;
int stduent_num;
Student(String sub, int num){
this.subject = sub;
this.stduent_num = num;
}
}
예제 설명:
Student 클래스에 sub, num 이라는 매개변수 를 받는 생성자가 있고, this. 를 사용하여 Student 클래스의 맴버 변수 의 초기 값을 객체 instance 과정에서 부터 초기화 를 시킬수 있다.
-test1.java
public class test1 {
public static void main(String[] args) {
Student s = new Student("Java", 100); // Student 클래스 객체화
System.out.println(s.subject+" = "+s.stduent_num);
}
}
예제 설명:
여기서 Student 클래스 를 객체화 시키는 과정을 보면, 매개변수로 "Java" 와 100 이 들어가는것을 볼수있는데, 이는 위에서 설명한 Student 생성자 에 의해서 sub, 과 num 의 매개변수로 들어가게 되고, 클래스 맴버 변수인 subject, student_num 에 저장이 되면서 초기화가 이루워 진다.
여기서 중요한 점은 생성자 도 Overloading 이 가능하다는 것이고, Overloading 과 overriding 의 개념은 다음 글에서 써볼 예정이다.
Getter & Setter
객체 지향언어 는 외부에서 객체 데이터를 직접적으로 접근하는것을 막는다. 이는 Java 의 Encapsulation 의 특징으로, 중요한 데이터들을 유저들 로부터 숨긴다는 의미로 이해하면 된다. 이를 이루기 위해서는 아래의 두가지 룰을 지켜주어야한다.
- 클래스 맴버 변수 를 private 으로 선언한다
- public get 과 set 메소드를 제공하고, 위의 private 변수들을 업데이트 한다
private 변수는 해당 클래스 내에서만 접근 할수 있지만, get 과 set 메소드 를 이용하여서 접근을 할수 있다.
- Person 클래스
public class Person {
//private => 접근 제한
private String name;
//Getter
public String getName(){
return name;
}
//Setter
public void setName(String newName){
this.name = newName;
}
}
예제 설명:
Person 이라는 클래스 에 name 이라는 private 변수를 선언하고 getter 와 setter 를 이용하여 name 변수를 다뤄줄것이다. 여기서 setName 은 객체화된 오브젝트를 통하여 불리고, (newName) 이라는 매개변수 를 통해 불린 오브젝트의 name 변수에 저장을 할것이다. 그 뒤, getName, 을 불러서 잘 저장이 되었는지 확인 할수있다.
-test1
public class test1 {
public static void main(String[] args) {
//Person 클래스 객체화
Person p = new Person();
//Set 메소드를 이용하여 Kai 라는 이름을 P 객체의 name 변수에 저장
p.setName("Kai");
//get 메소드를 이용하여 P 객체에 저장된 이름을 name_test 이라는 변수에 저장
String name_test = p.getName();
System.out.println(name_test);
System.out.println(p.getName()); //따로 저장하지 않고 바로 프린트도 가능
}
}
예제 설명:
위 Person 이라는 class 에서 getter 와 setter 가 명시 되었던것을 p 오브젝트를 통하여 setName, getName 을 사용할수있게 된다. 이를 통해, "Kai" 라는 이름을 맴버 변수에 초기화 시켜줬고, 이 값을 p.getName() 을 통하여 확인 할수 있다.
여기서 Constructor 와 getter/setter 가 헷갈릴수도 있지만, 생성자는 리턴 타입이 없다는것을 기억한다면, 쉽게 구분할수 있을것이다.
-자동으로 getter/setter 매소드 생성하기
vscode 에서 자동으로 getter 와 setter 를 생성할수 있는방법이 있는데, ctrl+shift+x 를 하여 extension -> Getter and Setter 검색 을 하고 아래와 같이 다운을 받아준다.
이후 ctrl+shift+p 을 누르고 generate get and set method 를 검색을 하면 다운로드를 받은 extension 이 아래와같이 보이고 설정을 눌러 자신만의 키보트 shortcut 을 만들어서 간편하게 사용할수있다.
이제 원하는 필드변수를 드래그 하여 선택한 Short cut 으로 getter / setter 를 만들면 된다.
'Java' 카테고리의 다른 글
Class vs Object vs Instance 그리고 생성자 (Constructor) 예제 (0) | 2021.11.28 |
---|---|
JAVA(자바) Windows / VSCODE 에 세팅하기 (0) | 2021.11.19 |