[LIKELION] 220923

고관운·2022년 9월 23일
1

회고

😭 느낀점

  • 이번 강의에서는 주의할 점이 많았다. (🔴부분 주의깊게 볼 것!)
  • 접근제한자와 정보은닉 부분이 상당히 중요하므로 복습 필요!
  • 다음주 상속부분 역시 중요하므로 정확히 알고가자

😁 목표

  • 과제 2개 완료하기
  • 프로그래머스 코딩 연습 (마지막 정리)

01. 자바-08-클래스와객체-2

생성자(Constructor)

생성자 정의

객체가 생성될 때 호출되는 객체 초기화 메소드

  • 리턴 타입 없음
  • 클래스명과 생성자 함수명이 같음

기본생성자

매개 변수가 없는 생성자
(따로 지정하지 않으면 컴파일러가 자동 생성)
🔴 주의할 점 : 매개 변수가 있는 생성자를 사용한다면, 기본생성자를 직접 입력해줘야 함.

this

this

객체 자신을 가리키는 참조 변수
(컴파일러에서 자동 생성하지만, 혼돈을 막기 위해 적어라)

this()

다른 생성자를 의미하며, 다른 생성자를 호출할 때 사용
🔴 주의할 점 : this()는 생성자 안에서 맨위에 위치해야 함.

실습

텔레비전 정보를 출력

class TV {
	String name;
	int year;
	int size;
	
	public TV(String name, int year, int size) {
		this.name = name;
		this.year = year;
		this.size = size;
	}
	
	public void show() {
		System.out.println(name + "에서 만든 " + year + "년형 " + size + "인치 TV");
	}
}

public class practice8_p10 {

	public static void main(String[] args) {
		TV myTV = new TV("LG", 2017, 32);
		myTV.show();
	}
}

02. 자바-09-패키지와클래스패스

패키지

패키지 : 비슷한 성격의 클래스를 묶어놓은 것

종류

  • 내장 패키지 : 자바에서 기본적으로 제공
  • 사용자 정의 패키지 : 내가 직접 만든 패키지

import graphics.*; : graphics 안에 있는 모든 클래스를 불러옴

🔴 주의할 점 : 같은 패키지 안에 동일한 이름의 클래스가 있으면 문제가 됨

패키지 이름 짓는 법

  • 패키지 이름은 모두 소문자
  • 인터넷 도메인 이름의 역순으로 이름을 구성
  • 이름 끝에 주체 또는 팀의 이름 추가

가상 기계가 클래스를 찾는 방법

  • cmd에서 class파일이 있는 경로로 이동 -> javac 클래스명.class 로 생성 -> java 클래스명으로 실행
  • set classpath=경로 로 이동 -> javac 클래스명.class 로 생성 -> java 클래스명으로 실행
  • java -classpath 경로 클래스명 실행(이때 이미 생성되어 있어야함)

03. 자바-10-접근제한자와정보은닉

접근제한자(Access Modifier)

종류

  • public
  • protected
  • default
  • private

클래스 정의 대상 : public, default
인스턴스 변수와 메소드 대상 : public, protected, default, private

클래스 대상

public : 어디서든 객체 생성 가능
default : 동일패키지로 묶인 클래스내에서만 생성 가능
(default로 클래스 생성 후 다른 패키지에서 import나 객체 생성을 하게 되면 오류)

변수와 함수

private : 직접적인 접근이 불가능
(자신의 내부 클래스에서만 접근 가능)
publicdefault의 내용은 클래스 대상과 동일

정보 은닉을 위한 private 선언

  1. 모든 변수는 무조건 private
  2. 모든 변수에 대해서 getter, setter 함수를 만들어서 값을 읽고 쓴다.
  3. 하나의 파일에 public 클래스 두개가 못오는 이유
    (소스파일명과 동일한 class에만 public가능 - main 함수가 있는 곳)
  4. 생성자 public 문제
    (다른 패키지에서 생성자를 부를 때 역시 public 필요)

정보은닉 관련 실습

class Circle {
	private double rad = 10;
	final double PI = 3.14;
	
	public Circle(double r) {
		setRad(r);
	}
	public void setRad(double r) {
		if(r < 0) {
			rad = 0;
			return;
		}
		rad = r;
	}
	public double getRad() {
		return rad;
	}
	public double getArea() {
		return Math.PI * rad * rad;
	}
}

public class practice10_p10 {

	public static void main(String[] args) {
		Circle c = new Circle(1.5);
		System.out.println(c.getArea());
		
		c.setRad(2.5);
		System.out.println(c.getArea());
		c.setRad(-3.3);
		System.out.println(c.getArea());
//		c.rad = -4.5;
		System.out.println(c.getArea());
	}
}

🟢 private로 변수를 설정했기 때문에 c.rad와 같은 접근이 불가능함.

0개의 댓글