Wrork 13 풀이 진행
work 12 (260526)
내 풀이 public class Student { String name = "홍길동"; //이름 int ban = 1; //반 int no =1; //번호 int kor = 100; // 국어점수 int eng= 60; //영어 점수 int math = 76; //수학 점수 int gettotal = kor+eng+math; // 총점 double getAverage
jamk-diary.tistory.com
OOP 3대 특성
캡슐화 (encapsulation) -> 과거에는 은닉성(imformation hiding)이라고 불렀다
- 클래스를 생성해서 묶어두는 것
// TODO 은닉성? -> 외부에서 접근을 허용할까 말까를 결정해주는것
상속성 ( inheritance)
다형성 (polymorphism)
캡슐화, 상속성, 다형석 -> 정석적인 표현
은닉성, 상속성, 다형성 -> 실용적인 표현
은닉성
접근지정자
private(개인적인)
public(대중적인)
protected
src (지역구)에 여러 패키지 (동네)만드는 방법
-> src 눌러서 class 만들 때 패키지 이름 정해주기
public -> 유튜브에 내용을 올려서 모두가 접근 할 수 있도록 해준다
private -> 계약서를 쓴 사람만 블로그에 올린 비공개 내용에 접근할 수 있도록 해준다.
setter -> 외부에서 이름을 밖을 수 있도록 해준다 . 부평동 김씨를 서초동에서는 박씨라고 바꿔 부를 수 있다.
getter -> 동네 밖에서 부를 수 있도록 만들어준다. 동네안에 김씨가 있는데 밖에서도 김씨를 부를 수 있다,
this -> 동명이인 부평동 김씨와 갈산동 김씨 동시 출몰 시 , 이건 부평사는 김씨야. 하고 알려줄 수 가 있다
<Sample 36 프로젝트 -> Sample 36 패키지 -> 메인 클래스>
package ssample36;
import MyCls.MyClass;
import cls.SampleClass;
import cls.ThisClass;
public class Mainclass {
public static void main(String[] args) {
// TODO 은닉성? -> 외부에서 접근을 허용할까 말까를 결정해주는것
MyClass cls = new MyClass();
// cls.number=1;
cls.name = " 홍길동";
// cls.metod() ;
SampleClass sc = new SampleClass();
int num = 123;
sc.setNumber(num);
int r=sc.getNumber();
System.out.println("r = " +r);
//This
ThisClass tc = new ThisClass();
System.out.println(tc); // -> ls.ThisClass@681a9515 출력하면 이렇게 나온다 이건 heap 영역의 주소이다
System.out.println(tc.getThis()); //System.out.println(tc.getThis()); ,System.out.println(tc) 이 주소는 같은 주소이다
}
}
<Sample 36 프로젝트 -> MyCls 패키지 -> Myclass 클래스>
package MyCls;
public class MyClass {
//(멤버)변수인 경우 90% 이상 -> private 을 사용한다
private int number; // 클래스의 외부 접근을 차단하게 만든다 private -> 접근 지정자
public String name ; //누구나 접근을 가능하게 만든다 , 어느곳에서나 접근을 허용한다 public -> 접근 지정자
//public String name = "홍길동"; 이렇게 적으면 MainClass 에서 에러 해결
protected double height; // 상속후 알려주는 height
//함수 (멤버) 메소드인 경우 90% 이상이 -> public 을 사용한다
void method() {
}
}
<Sample 36 프로젝트 -> Cls 패키지 -> Sample class 클래스>
package cls;
public class SampleClass {
private int number;
private String name;
private double height;
// setter, getter method 를 생성
// 외부에서 세팅을 하고 싶고 외부에서 값을 받고 싶을 때
//setter 함수 -> 외부에서 이름을 바꿀수가 있다
public void setNumber(int number) {
this.number = number;
}
// pub 만 누르고 컨트롤 스페이스 치면 위의 형식 나옴
//
// number = number; 에러는 안 나는데 이상하다
// 왜? int number 가 메개 변수이기 때문이다. 멤버변수랑 매게 변수랑 함께쓰이는 경우 매게 변수가 더 우선시 된다.
// 그래서 멤버 변수인 number = number;앞에 this. 를 붙인다
//getter 함수 // 밖에서 부를 수 있게 만들어 준다
//자동으로 만들기 메뉴 source 들어가서 제너레이티드 게터 앤드 세터 들어가기
//생성할 변수 선택 후 화살표 누르기 게터 세터 체크
public int getNumber() {
return number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
/*
여기서 return number; 앞에 this. 안 붙이는 이유 -> 부딛히는 게 없음
*/
}
< Sample 36 프로젝트 -> Cls 패키지 -> Thisclass 클래스>
package cls;
public class ThisClass {
/*
This 란 무엇일까?
this : 자기 자신의 주소 (heap 영역의 주소 ) = java 언어로는 reference(참조) 라고 한다
0번째 매개 변수로 모든 매소드에서 접근이 가능하다
*/
int number;
public ThisClass getThis() {
return this;
}
public void print( ) {
//number = 1;
this.number = 1;
}
public void setNumber () {
int number = 0; //local(지역) 변수
this.number = 12; // -> 멤버 변수에 값을 셋팅
number = 12 ; // -> 지역변수에 값을 셋팅
}
}
재미니의 개념 이해와 퀴즈 ! 💡 1분 만에 이해하는 핵심 개념 요약1. OOP의 3대 특성 (정석 vs 실용)객체 지향 프로그래밍(OOP)은 프로그램을 만들 때 '객체(물건/레고 블록)' 단위로 나누어 조립하는 방식이에요.
💡 정석적으로는 '캡슐화' 안에 '은닉성'이 포함되지만, 실무에서는 외부로부터 데이터를 숨긴다는 의미로 혼용해서 많이 씁니다. 2. 접근 지정자: public vs private
3. Setter와 Getter (문지기 메서드)변수를 private으로 숨겨놓으면 외부에서 값을 읽거나 쓰지 못하겠죠? 이때 안전하게 통로를 열어주는 문지기가 바로 Getter와 Setter입니다.
4. this란 무엇인가?동네에 동명이인(이름이 같은 사람)이 나타났을 때 누구인지 정확히 가리키는 손가락이에요.
📝 개념 확인 퀴즈 10문항정답은 종이나 메모장에 따로 적어가며 풀어보세요! (정답과 해설은 맨 아래에 있습니다.)[O / X 문제]Q1. 클래스를 생성해서 관련 있는 변수와 메서드를 하나로 묶어두는 것을 '상속성'이라고 한다. ( O / X ) Q2. 클래스의 멤버 변수는 외부의 무분별한 접근을 막기 위해 주로 private 접근 지정자를 사용한다. ( O / X ) Q3. private으로 선언된 변수는 같은 패키지 안에 있는 다른 클래스라면 자유롭게 접근할 수 있다. ( O / X ) Q4. Getter 메서드는 외부에서 보이지 않는 private 변수의 값을 외부로 꺼내올 때 사용한다. ( O / X )[객관식 문제]Q5. 다음 중 외부 클래스에서 접근하지 못하도록 클래스 내부의 데이터 접근을 차단하는 OOP의 실용적 표현은 무엇인가요? ① 상속성 ② 은닉성 ③ 다형성 ④ 가독성Q6. 자바에서 this가 의미하는 것은 무엇인가요? ① 현재 실행 중인 프로그램의 전체 메모리 주소 ② 새로 생성할 다음 클래스의 이름 ③ Heap 영역에 생성된 객체 자기 자신의 주소 (참조) ④ 메서드가 종료된 후 돌아갈 목적지 주소 Q7. 다음 코드에서 this.number = number;를 사용하는 진짜 이유는 무엇인가요? public void setNumber(int number) { this.number = number; } Q8. 자바에서 소스 코드를 작성할 때 여러 동네(패키지)를 나누어 관리하고 싶다면 보통 어떤 폴더 아래에 패키지를 생성하나요? ① bin 폴더 ② src 폴더 ③ lib 폴더 ④ target 폴더 [단답형/주관식 문제]Q9. 외부에서 private 멤버 변수의 값을 안전하게 변경하거나 세팅할 수 있도록 도와주는 메서드의 이름을 통칭하여 무엇이라고 하나요? (영어 또는 한국어)Q10. 다음 코드에서 printAddress()를 호출했을 때 출력되는 두 값의 관계는 어떠할까요?
Java
ThisClass tc = new ThisClass(); System.out.println(tc); System.out.println(tc.getThis()); // 내부에서 return this;를 함 🔑 정답 및 해설
|
Sample37-constructor
constructor : 생성자
메소드 (함수)
Class 명과 같은 이름의 함수
Return 값이 없다
객체 생성 시에 자동 호출 된다 -> callback
다시 호출할 수 없다
초기화가 아니다 ( init 이 아니다) -> 기본값을 설정하도록 만든다
-> 파이썬에는 없다 -> init
Over Load 가 가능하다 : 함수명은 같은데 매개변수가 다른 동명이인 생성 가능
Destructor : 소멸자
: 현재는 사용하지 않는다
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
constructor : 생성자 <- 초기값 설정용
메소드 (함수)
Class 명과 같은 이름의 함수
Return 값이 없다
객체 생성 시에 자동 호출 된다 -> callback
다시 호출할 수 없다
초기화가 아니다 ( init 이 아니다) -> 기본값을 설정하도록 만든다
-> 파이썬에는 없다 -> init
Over Load 가 가능하다 : 함수명은 같은데 매개변수가 다른 동명이인 생성 가능
Destructor : 소멸자
: 현재는 사용하지 않는다
*/
int number = 3; // 변수 선언과 동시에 초기화
int array[] = {1,2,3};
//SampleClass sample = { 1, "홍길동", 123.456 };
// SampleClass sc = new SampleClass();
// SampleClass scls = new SampleClass("성춘향");
SampleClass samcls = new SampleClass(33);
SampleClass ssm = new SampleClass("ddd");
}
SampleClass SampleClass()
SampleClass SampleClass(int number)
SampleClass SampleClass(string name)
public class SampleClass {
int number;
String name;
double height;
//default 생성자라고 부른다 = 아무것도 없는 생성자
public SampleClass() {
number=0;
name = "홍길동";
height = 172.1;
System.out.println("SampleClass SampleClass()");
}
public SampleClass(String name) {
this.name = name;
System.out.println("SampleClass SampleClass(string name)");
}
//외부에서 숫자는 입력을 받되 기본 생성자로 호출하고 싶은 경우
//즉, 생성자를 2개 호출하고 싶다 아래 방법 사용
public SampleClass(int number) {
this(); // 기본생성자를 호출하는 방법 항상 위에 있어야 한다
this.number = number;
System.out.println("SampleClass SampleClass(int number)");
}
/*
public SampleClass(int number) {
this("일지매"); // 기본생성자를 호출하는 방법
this.number = number;
System.out.println("SampleClass SampleClass(int name)");
}
이렇게 쓸 수도 있다
*/
// 소스 -> 커스트럭턴 유징들어가면 아래처럼 된다
public SampleClass(int number, String name, double height) {
super();
this.number = number;
this.name = name;
this.height = height;
}
}
}
| 내가 이해한 방향 Sample Class 에서
public SampleClass() {
number=0; name = "홍길동"; height = 172.1; System.out.println("SampleClass SampleClass()"); } public SampleClass() 괄호 안에 아무것도 없음=default라 이건 기본 생성자 = this 가 된다
public SampleClass(String name) {
this.name = name; System.out.println("SampleClass SampleClass(string name )"); } ------------------------------------------------------------------------------------------------------------------------------------------------------------------ main class 와 같은 외부 클래스에서 숫자를 입력을 받고 sampleclass 에서 기본 생성자로 호출하고 싶은 경우 -> 생성자를 2개 호출하고 싶을 때 아래 방법을 사용한다
public SampleClass(int number) {
this(); // 기본생성자를 호출하는 방법 항상 위에 있어야 한다 this.number = number; System.out.println("SampleClass SampleClass(int number)"); 이렇게 하면 main class 에서 SampleClass samcls = new SampleClass(33); 입력후 출력했을 때
SampleClass SampleClass()
SampleClass SampleClass(int number)
/*
public SampleClass(int number) { this("일지매"); // 기본생성자를 호출하는 방법 this.number = number; System.out.println("SampleClass SampleClass(int name)"); } 이렇게 쓸 수도 있다 */ --------------------------------------------------------------------------------------------------------------------------------------------------------------- name 이건 메인클래스 ddd 가 오는 곳 그래서 name 은 ddd 가 되어다 |
Sample38-objectArray
import java.util.Scanner;
import cls.Human; // 클래스 밖에 생성
public class Mainclass {
public static void main(String[] args) {
//홍길동과 성춘향 두 명의 데이터를 저장한 것
Human hu = new Human();
hu.setName("홍길동");
hu.setAge(24);
hu.setHeight(172.1);
System.out.println(hu.toString());
Human human = new Human ( " 성춘향 " , 15 ,156.3);
System.out.println(human.toString());
// 예제 - 5명의 데이터 입력받아서 저장하고 출력하시오
Scanner sc = new Scanner(System.in);
// 배열(변수)만 생성
Human humans[] = new Human[5];
// Human humans1, humans2, humans3;
for (int i = 0; i < humans.length; i++) {
System.out.print("이름 = ");
String name = sc.next();
System.out.print("나이 = ");
int age = sc.nextInt();
System.out.print("키 = ");
double height = sc.nextDouble();
humans[i] = new Human(name, age, height);
}
for (Human h : humans) {
System.out.println(h.toString());
}
}
}
Human [name=홍길동, age=24, height=172.1]
Human [name= 성춘향 , age=15, height=156.3]
이름 = 대추
나이 = 6
키 = 50
이름 = 미로
나이 = 6
키 = 40
이름 = 봉구
나이 = 9
키 = 100
이름 = 핑구
나이 = 65
키 = 156.3
이름 = 대구
나이 = 65
키 = 545
Human [name=대추, age=6, height=50.0]
Human [name=미로, age=6, height=40.0]
Human [name=봉구, age=9, height=100.0]
Human [name=핑구, age=65, height=156.3]
Human [name=대구, age=65, height=545.0]
public Human() {
}
//public Human() 입력하고 소스 -> 제너레이트 유징
public Human(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
//소스-> 제너레이트 투스티링
@Override
public String toString() {
return "Human [name=" + name + ", age=" + age + ", height=" + height + "]";
}
// 소스-> 제너레이트 게터 앤 세터
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 double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
| 복습하면서 할것 오늘 풀어본 예제 다시 풀기 자바 연습 과제 풀기 |
'Java > Java 수강일지' 카테고리의 다른 글
| [수강일지_15] 상속성 ,다향성,오버라이드, 강제형변환(cats) (1) | 2026.05.29 |
|---|---|
| [수강일지_14] 학생정보 관리 프로그램 만들기 (1) | 2026.05.28 |
| [수강일지_12] 객체지향 프로그래밍 void,cal (0) | 2026.05.26 |
| [수강일지_11] over load , Exception , File in put, file out put , Calendar ,Date (1) | 2026.05.22 |
| [수강일지_10] function (함수) (0) | 2026.05.21 |