TIL. 생성자 심화, 배열, 접근지정자

hyuko·2023년 1월 5일
0

Java

목록 보기
16/26

생성자 심화

  • 생성자란 : 메소드와 동일한데 주소 값을 반환할 뿐이다.
    그렇기 때문에 오버로딩이 된다.(메소드이기 때문에)

생성자의 특징

  1. 기본 생성자는 애초에 생략이 되어있다.
  2. 생성자의 오버로딩이 이루어지면 기본 생성자는 생략 되어있던 것이 비활성화 된다.(오버로딩 된 애들이 덮어 쓰기 해버린다.)
  3. 오버로딩이 이루어 지면 기본생성자를 쓰려면 기본생성자 생성을 해주어야한다.

클래스에는 변수와 메소드가 존재하는데
메소드의 매개변수와 클래스내의 멤버변수의 명이 같을 수 있다.
본래라면 허용이 되지 않는데 클래스내에서는 이를 허용하면서 둘을 다르게본다.
이 때 생성자가 생성될 당시에 매개변수를 받을 때 그 매개변수를 클래스의 멤버변수에 대입을 하고 싶을 때 받고자 하는 생성자 실행부에
this.멤버변수 = 매개변수; 로 표현해서 대입할 수 있다.

여기서 this. 이라는 것은 . 즉 참조한다 주소 값을 찾아간다라는
의미이고 this는 자기자신을 의미하는데 여기서 자기자신이란 class를
뜻한다. 이 말을 풀어보면 클래스의 주소값에 들어가서 뒤의 멤버변수를
찾아라 라는 의미이다.

생성자 예제 코드


// Student 라는 생성자로 쓰기 위한 클래스
public class Student {
	
	// 참조변수, 멤버변수, 레퍼런스변수
	String name;
	int age;
	
	Student () {
		System.out.println("기본 생성자 호출");
	}
	
	Student(int age) {
		System.out.println("나이는: " + age );
		this.age = age;
	}
	
	Student(String name) {
		this.name = name;
	}
	
	Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	void printInfo() {
		System.out.println("학생의 이름: " + name);
		System.out.println("학생의 나이: " + age);
	}
}

=============================================
// main 클래스
public class StudentMain {

	public static void main(String[] args) {
		Student student1 = new Student();
		Student student2 = new Student(20);
		Student student3 = new Student("이순신");
		Student student4 = new Student("이순신", 20);
		
		student1.printInfo();
		student2.printInfo();
		student3.printInfo();
		student4.printInfo();
		
	}
}

  • 예제 코드 실행시 콘솔 화면


접근지정자

  • 접근지정자란?

    클래스의 멤버 각각에 외부에서 접근할 수 있는 범위

publicprotecteddefalutprivate
제한없음동일패키지, 상속받은 클래스내부동일패키지동일클래스
  • 접근은 참조를 한다라는 의미
  • 지정은 그 범위를 지정한다는 의미

접근 지정을 하는 이유

데이터는 항상 메소드를 통해 들고온다.
멤버변수들은 항상 private로 막아준다.(데이터의 은닉)

메소드는 연결하기 위한 창구 같은 존재인데,
클래스내에서만 작동이 되야하는 메소드들은 멤버변수처럼 private로
막아준다.

예를 들어, 메소드안의 기능이 중첩이 되고 방대해져서 나누어야 할 경우
그 메소드 전체가 다른 클래스에서 쓰이지 않는 경우 굳이 전부 오픈할 필요가 없다.

이러한 멤버변수가 private로 막아뒀을 때 정보를 들고 오거나 저장할 때 쓰이는 메소드를 Getter와 Setter라고 한다.

접근지정자 예제

public class Student {
	
	private String name;
	private int age;
	
	
	
	public Student() {}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void printInfo() {
		System.out.println("이름: " + name);
		System.out.println("나이: " + age);
	}
}
==============================
// 실행 클래스
public class StudentMain {

	public static void main(String[] args) {
		Student student1 = new Student();
		
		student1.setName("홍길");
		
		student1.printInfo();
		
	}
}

  • 예제코드 실행 콘솔 화면


배열

배열이란?

  • 배열이란?

    배열은 참조자료형이다. 모든 자료형은 배열로 만들 수 있다.

  • 배열의 선언 형식


자료형[] 변수명 = new 자료형[배열의 길이];
// 배열의 길이는 줄 수도 안줄 수도 있다.

이 외에도 
자료형[] 변수명 = {" ", " "};
자료형[] 변수명 = new 자료형{"",""} 등으로
표현할 수 있다.

※ 선언을 할 때에 new가 들어가면 동적 할당을 한다는 의미로
참조를 한다는 의미로 생각 하면된다. (주소 값을 담는다.)

  • 배열의 특징

    배열에는 인덱스 값이 존재한다. 그 인덱스 값은 정수이다.
    그 인덱스를 참조하는 개념이다.

  • 배열을 사용하는 이유

    예를 들어 변수 하나하나 프린트 하는 것은 비효율적이다.
    그래서 반복을 하려면 반복을 할 수 있는 형태로 바꾸어 주어야한다.
    그 형태가 배열이다.

배열 예제 코드

int num1 = 10;
		int num2 = 20;
		int num3 = 30;
		int num4 = 40;
		int num5 = 50;
		
		System.out.println(num1);
		System.out.println(num2);
		System.out.println(num3);
		System.out.println(num4);
		System.out.println(num5);
		
		// 배열은 참조자료형이다.
		
		int[] nums = new int[5];
		
		nums[0] = 10;
		nums[1] = 20;
		nums[2] = 30;
		nums[3] = 40;
		nums[4] = 50;
		
		for(int i = 0; i < 5; i++) {
			System.out.println(nums[i]);
		}
  • 예제 1코드 실행 화면

public static void printNames(String[] names) {
		for(int i = 0; i < names.length; i++) {
			System.out.println("이름[" + (i + 1) + "]: " + names[i]);
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
		
		String[] names = new String[3];
		
		// 선언방식 1번째 들어갈 값이 정확하지 않을 때 , 들어갈 공간이 확실할 때 크기를 지정한다.
		names[0] = "홍길동";
		names[1] = "김유신";
		names[2] = "이순신";
		
		// 들어갈 값이 정확할 때 크기를 지정하지 않는다
		String[] names2 = new String[] {"장보고", "세종대왕", "이을용"};
		
		// 배열의 초기화와 선언에서만 인정을 한다.
		String[] names3 = {"설기현", "박지성", "이천수", "손흥민"};
		
		printNames(names);
		printNames(new String[] {"이정재", "원빈", "장동건"});
		printNames(names3);
		
		
	}
  • 2번 코드 실행화면

profile
백엔드 개발자 준비중

0개의 댓글