자바에서는 ;(세미콜론) 완전 필수
에러 메시지는 많이 읽어보는게 좋다.
package com.ysh.basic;
import java.sql.Date;
public class MyProfile{
public static void main(String[] args ) {
int age = 30;
double tall = 160.5;
char gender = '여';
boolean isPretty = true;
MyStr name = new MyStr();
// MyDate birthday = new MyDate();
// String name = new String("양세현");
Date birthday = new Date(2001, 10, 3);
// string name = "양세현";
System.out.println(age);
System.out.println(tall);
System.out.println(gender);
System.out.println(name);
System.out.println(name.성+""+name.이름1+""+name.이름2);
System.out.println(birthday.getYear());
}
}
local데이터는 초기화해서 사용해야한다.
local변수는 자동초기화가 안된다.
스택은 각 데이터가 실행될때마다 쌓인다.
🤔 member변수란? = instance data
1. member 변수(멤버 변수)란?
클래스 내부에 선언된 변수, 객체(인스턴스)에 속하는 데이터
각 객체마다 독립적으로 할당되며, 클래스 내부의 속성을 저장하는 역할
2. 멤버변수 = 인스턴스 변수(instance data)
객체가 생성될 때마다 새롭게 할당되는 변수이기에 멤버 변수는 인스턴스 변수라고 한다.
클래스가 아닌 객체(인스턴스)에 종속되는 데이터라는 의미에서 인스턴스 데이터라고 부른다.
package com.ysh.basic;
public class MyProfile{
int age = 30;
double tall = 160.5;
char gender = '여';
boolean isPretty = true;
MyStr name = new MyStr();
// MyDate birthday = new MyDate();
// String name = new String("양세현");
Date birthday = new Date(2001, 10, 3);
// string name = "양세현";
public static void main(String[] args ) {
// 인스턴스 변수 출력
System.out.println(age);
System.out.println(tall);
System.out.println(gender);
System.out.println(name);
System.out.println(name.성+""+name.이름1+""+name.이름2);
System.out.println(birthday.getYear());
}
}
member데이터는 instance영역
끊어지면 GC가 됨
local데이터는 stack영역
숫자형태의 데이터는 byte가 double로 갈 수 있느냐에 대한것
//package com.ysh.basic;
//
////Jvm - load - (main 제외한)static 멤버 초기화 - 상속관계 파악
//public class MethodTest {
//
// public static void main(String[] args) {
// //3.
// // new MethodTest();
// // 4.
// MethodTest m = new MethodTest();
// // method안에 또 다른 method 정의 불가
// // method안에서 호출 가능
// //2.
//// a();
// //5.
// m.a();
// }
// //return하는 데이터가 없으면 앞에 void 작성
// // 1.
// void a() {
//
//}
//}
package com.ysh.basic;
//Jvm - load - (main 제외한)static 멤버 초기화 - 상속관계 파악
public class MethodTest {
public static void main(String[] args) {
}
static void a() {
// static 객체 없이 사용해라
// static은 data를 공유하고 싶을때 사용
// method
}
}
Java Method
package com.ysh.basic;
public class MethodTest {
// String[] args 파라미터인데 고정됨
public static void main(String[] args) {
MethodTest m = new MethodTest();
m.a();
m.b();
}
// 기능이 같으면 이름을 일관성있게 같게 짓는게 좋음 그러나 argument 값이 달라야함 이것을 overloading이라고 한다.
void print (int i ) {
System.out.println("a 호출됨");
}
void print (int i, double d) {
System.out.println("b 호출됨");
}
}
package com.ysh.basic;
public class MethodTest {
// String[] args 파라미터인데 고정됨
public static void main(String[] args) {
MethodTest m = new MethodTest();
m.print(10); // int 타입 값 전달
m.print(10.0); // double 타입 값 전달
}
// 기능이 같으면 이름을 일관성 있게 같게 짓는게 좋음 그러나 argument 값이 달라야 함 이것을 overloading이라고 한다.
void print(int i) {
System.out.println("int 타입의 print 호출됨");
}
void print(double d) {
System.out.println("double 타입의 print 호출됨");
}
}
method overloading
메서드 이름 같아야하고 argument list(즉, 파라미터) 는 달라야한다. (<-이거 두개만 비교함) (개발 편의성을 높이고 사용성을 줄이기 위해 메서드 이름을 같게 한다. 위의 코드에서는 print말이당)
리턴타입은 달라도된다.
코드를 제공하는쪽 코드를 짜는쪽(사용하는쪽)은 분리가 되어있다.
자바는 협업 중시 언어이다.
method scope(범위)
메서드가 실행되면 스택에 올라가고 메서드가 실행 끝나면 가차없이 날아감
double d는 local 변수
회귀
public class Main {
public static void main(String[] args) {
int result = sum(10);
System.out.println(result);
}
public static int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
}
위로 올라간다. 위에가 끝나야 밑으로 내려간다만 기억하기
OOP
객체지향이란 무엇입니까? 재사용 가능한 기법이다.
클래스와 객체는 무엇입니까?
클래스는 자바에서 프로그램 기본단위이다. (즉, 코드를 의미)
객체는 단위를 통해서 나온 메모리 정보 (즉, 코드의 수행 결과를 의미)
🧔🏻- 쇼핑몰 하나 만들어 주세요
👩🏻 - 고객이 온라인으로 구매하는 시스템 → 만일 회원가입 시키겠다라고 하면
- 고객, 온라인, 상품, 구매, 시스템(명사 동그라미) → 고객, 이름, 전화번호 (즉, 확장됨)
후보 명사(후보 키) | 제거 이웃 | 선택 명사(선택 키) |
고객 | member | |
온라인 | 구조 | |
상품 | product | |
시스템 | 용어 | |
이름 | member 구성요소(data) | |
전화 | member 구성요소(data) |
프로그램 단위를 꺼내는 것은 방법론이라고 한다.
대표적으로 USDP라는게 있다.
USDP(Unified Software Development Process)
통합 소프트웨어 개발 프로세스를 의미
<주요 특성>
✅ 반복적(Iterative) 개발
한 번에 모든 기능을 개발하는 것이 아니라, 점진적으로 반복하며 개선하는 방식
✅ 객체지향 모델링
UML(Unified Modeling Language)을 활용하여 시스템을 설계
✅ 4단계 개발 프로세스
Inception (시작) - 프로젝트 목표 및 범위 설정
Elaboration (정교화) - 아키텍처 설계 및 핵심 요구사항 분석
Construction (구축) - 실제 코드 개발 및 기능 구현
Transition (전환) - 테스트 및 배포
class 고객 {
data(명사들관의 관계를 생각한다.) (영속성을 가졌는지 확인한다.)
method
}
영속성을 가지면 고객은 발채 확률이 높다.
영속성이란?
프로그램이 종료되거나 시스테미 재부팅되어도 데이터가 사라지지 않고 유지되는 성질
<-> 휘발성(프로그램이 실행되는 동안만 존재하고 종료되면 사라지는 데이터)
👩🏻 💭 - 수강생이 입실할때 체크 되는 시스템 의뢰받음
위에와 같은 과정을 거친다.
byte코드를 가져와야 재사용이다.
byte 코드란? 사람이 이해할 수 있는 소승코드와 컴퓨터가 직접 실행하는 기계어 사이의 중간 코드
- JVM(Java Virtual Machine)이나 가상 머신(VM)이 실행할 수 있는 명령어 집합
- OS나 HW 의존 X
바이트코드가 사용되는 곳
✅ Java (JVM 사용) → .class 파일 (Java 바이트코드)
내 머리 속의 객체는 메모리 속의 객체이다.
⭐ 객체지향적 사고를 확장시키는 것은
사물을 어케 표현하는가
사물의 관계를 어케 구조화하는가
OOP 3대 concept
1) encapsultaion(은닉화)
데이터 보호 방법: data-private, method-4가지 중 하나 적절히 선언
2) inheritance(상속)
단일상속 : extends Super
package com.ysh.basic;
public class InheritanceTest {
public static void main(String[] args) {
InheritanceTest t = new InheritanceTest();
//object로 상속받은 메서드
String s = t.toString(); //주소값 리턴
System.out.println(s); //유일값 리턴
int i = t.hashCode();
System.out.println(i);
InheritanceTest t2 = new InheritanceTest();
System.out.println(t==t2);
boolean b = t.equals(t2); // 주소값 리턴
System.out.println(b);
}
3) polymorphism(다형성) (next time..)
알고리즘 스터디
백준 - 배열 문제
💭에러 생기면 대충 읽었는데 그러면 안되겠당..ㅎ
💭 많이 놓쳤다.. 졸려,,,앞으로 모닝커피 해야겠다..
💭 수업 중간에 노트북이 먹통됨.. 당황 그 자체.. 찐 먹통.. 강제 종료도 잘 안 되어서.. 좌절하고 있던 찰나, 아이패드로 간신히 들어갔다가 강제 종료되어서 노트북으로 수업 들었다. (알고리즘 스터디 시간에 한번더 먹통남..🥲)
💭 여긴 다들 실력자만 모였다.. 🥲 진짜 게을리 공부하면 안 되겠당...
💭 알고리즘 스터디.. 고요 속 타자기치는 소리만 들렸다.. 자바는 감자여서.. 자바스크립트로 풀어야겠다.. 근데 백준으로 자바스크립트를 입력받는 방법을 몰라..이걸 해결해야해.. 백준이랑은 안친해서 백준하고 친해져야겠다..
💭 주말에 TS 공부 처음부터 해야한다.. (j가 되고 싶어..)
💭 집중 많이 못했는데 뭔가 열심히 적어놨다.. 영상 다시보기 가능했으면.. (상속 설명이 다시 필요해..)
💭캡처해둔거..정리 완료 ✌🏻
💭 수업 듣는내내 드라이기 소리가 났는데 지금 와서 생각해보니 노트북 펜소리..(어쩌면 노트북 먹통의 원인이겠다..)
'💡 URECA' 카테고리의 다른 글
[URECA] DAY 12 | 자바(4) (1) | 2025.02.11 |
---|---|
[URECA] DAY11 | 자바(3) (0) | 2025.02.10 |
[URECA] Day09 | 자바(1) (5) | 2025.02.06 |
[URECA] DAY08 | TS(2) (0) | 2025.02.05 |
[Day 07] JS(4), TS(1) (1) | 2025.02.04 |