메소드 변수정의 한 후
상단바 source - generate setter&getter 들어가서 변수 체크하면 자동으로 작성됨
캡슐화
상속성
다형성 : 객체의 형변환, 상속, 오버라이딩,객체추상화(abstract,인터페이스)
https://www.youtube.com/watch?v=QPulWilGBpk
드뎌 마크다운 언어로 코드에 색깔넣음.. 참고 벨로그 주소
마크다운 벨로그
package oop.basic;
public class MyMethod3 {
매개변수로 전달받은 배열의 값에 1000을 더한 새로운 배열은 만들어서 리턴
메소드명 : changeArr
매개변수 : int[]
리턴값 : int[]
//새로운 배열 변수 선언
public int[] changeArr(int[] myarr) {
int[] arr = new int[myarr.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = myarr[i] + 1000;
}
return arr;
}
//배열 변수를 받은 변수로 리턴(기존값이 변경되어버림)
public int[] changeArr2(int[] myarr) {
for (int i = 0; i < myarr.length; i++) {
myarr[i] = myarr[i] + 1000;
}
return myarr;
}
}
for문 자동 작성방법
public int[] changeArr(int[] myarr) {
int[] arr = new int[myarr.length];
for
여기까지 입력하고 ctrl+space 하면 for - use index on array 나옴 이거 클릭하면 자동생성됨
메소드 테스트
package oop.basic;
import javax.sound.midi.SysexMessage;
//매개변수와 리턴값이 참조형인 경우
public class MethodTest3 {
public static void main(String[] args) {
MyMethod3 obj = new MyMethod3();
int[] data = {88,79,66,100};
//1.MyMethod3에 정의한 메소드를 호출해서 작업
//- 호출할때 data를 매개변수로 전달
int[] resultArr = obj.changeArr(data);
//변수를? 주소를? 달리 정의한? 체인지어레1과 2 는 다르게 나온다. 2는 변수를 같이써서 원본이 바뀌어버림
//2.호출한 결과를 출력해보기
//[출력형태]
// ___ ___ ___ ___
for (int i = 0; i < resultArr.length; i++) {
System.out.print(resultArr[i]+"\t");
}
System.out.println();
//원본출력하기
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+"\t");
}
}
}
생성자는 객체가 생성될때(인스턴스가 생성될때) 한번 호출되는 인스턴스 초기화 메소드(객체가 갖고있는 값을 초기화하고)
[객체생성]
클래스타입 변수 = new 생성자()
생성자는 일반 메소드와 다르게 객체가 생성될때 딱 한번만 호출되는 메소드
new연산자가 생성자메소드를 보고 메모리에 할당해야 하는 클래스가 무엇인지 파악하고 작업해야 하므로 생성자메소드의 규칙이 존재
생성자메소드는 어디에 쓰는지?
⇒ 객체가 생성될때 처리해야 하는 기능이나 처음 실행되어야 하는 로직을 정의할 목적으로 사용
⇒ db연결, 네트워크접속, os랑 통신해서 os의 자원을 사용하는 경우
⇒ 사용자정의객체의 생성자는 주로 객체가 갖고 있는 속성의 값을 초기화하는 용도, 객체에 값을 주는게 객체 초기화..?!
[생성자규칙]
객체가 생성될때 무조건 생성자가 호출되어야 한다. 개발자가 클래스를 정의하면서 생성자를 정의하지 않으면 컴파일러가 매개변수없는 생성자를 만들어준다.(기본생성자)
생성자의 이름은 클래스명과 대소문자까지 동일하게 정의한다.
생성자는 특별한 메소드이므로 리턴타입을 명시하지 않는다(void도 안쓴다)
생성자도 메소드이므로 매개변수를 정의할 수 있다.
⇒사용자정의로 작성하는 생성자에는 멤버변수를 초기화할 수 있도록 코드를 작성하는 것이 일반적
⇒객체가 생성될때 객체의 멤버변수를 모두 초기화(→멤버변수에 값을 할당)
생성자도 오버로딩을 지원한다
⇒생성자를 여러개 정의할 수 있다. 매개변수 갯수, 타입, 순서를 다르게 작성
클래스에 생성자를 정의하면 컴파일러는 더이상 기본생성자를 제공하지 않는다.
프레임워크 내부에서 사용되는 것은 기본생성자이므로 기본생성자는 무조건 정의한다.
보통멤버변수를 초기화하는 일만 진행한다..
우클-souce-generate constructor using field하면 만들어짐
package oop.basic.constructor;
public class Constructor {
private String name;
private String id;
private String pass;
private String addr;
// 기본생성자
public Constructor() {
//생성자내부에서 객체가 생성될때 실행될 코드를 정의
System.out.println("Constructor 기본생성자");
}
// 매개변수가 있는 생성자
public Constructor(String name, String id, String pass, String addr) {
//4개의 매개변수를 각 멤버변수에 할당
this.name = name;
this.id = id;
this.pass = pass;
this.addr = addr;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
package oop.basic.constructor;
import oop.basic.Person;
public class ConstructorTest {
public static void main(String[] args) {
Person p = new Person();
Constructor obj = new Constructor();
System.out.println(obj);
Constructor obj2 = new Constructor();
obj2.setName("석진");
obj2.setAddr("서울");
obj2.setId("jin");
obj2.setPass("1234");
System.out.println(obj2.getName()+","+obj2.getAddr()+","+obj2.getId()+","+obj2.getPass());
//생성자를 이용해서 멤버변수를 초기화
Constructor obj3 = new Constructor("석진","jin","1234","서울");
System.out.println(obj3.getName()+","+obj3.getAddr()+","+obj3.getId()+","+obj3.getPass());
}
}
package oop.basic.constructor;
import java.io.FileInputStream;
//API의 생성자들을 확인
public class APIConstructor {
public static void main(String[] args) throws Exception {
//1. String클래스
byte[] data1 = {97,98,99,100}; //ASCII
char[] data2 = {'0','1','0','-'};
String str1 = new String(data1);
System.out.println(str1);
//원래 참조형 변수는 주소가 저장되는데..?! 왜 문자열이 나오나요?->이걸 객체형으로 변환한거래...
String str2 = new String(data1,2,2);//index0부터시작
System.out.println(str2);
String str3 = new String(data2);
System.out.println(str3);
String str4 = new String(data2,0,3);
System.out.println(str4);
//FileInputStream
FileInputStream fis = new FileInputStream("test.txt");
System.out.println((char)fis.read());
}
}

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.