본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-11-08(7day)

by elicho91 2022. 11. 8.

JAVA 기초문법(2)


👉 조건문 switch
다중 선택문 : 하나의 변수값을 평가하여, 각 값에 대해 개별적인 처리를 하는 문장.

-1) 구조

 char score = 'A';
        switch (score){
            case 'A':
                System.out.println("A등급입니다."); // 값1과 변수의 값이 동일한 경우 아래 샐행문들 실행~
                break; // 위 실행문들을 실행하고 switch 강제종료!!
            case 'B':
                System.out.println("B등급입니다."); // 실행문들~
                break;
            case 'C':
                System.out.println("C등급입니다."); // 실행문들~
                break;
            default:
                System.out.println("낙제입니다."); // 실행문들~ 마지막 break는 생략가능

        }


-2) 특징과 주의점
1. switch 문으로 평가 할 수 있는 변수는 주로 정수형, String / (int, char, String) 
2. case 다음에는 반드시 값이 하나가 와야한다.
3. case 0 : .... case 2 : ... 와 같이 반드시 값을 정렬할 필요없다.
4. dafault 는 생략가능
5. case 별로 {}로 묶지 않는다. 콜론 : 으로 영역 인식.
6. 다음 case가 실행되지 않도록 할 경우에는 



👉 반복문 while
-1) 조건식을 먼저 검사한 후, 실행하는 반복문 (루프)
-2) 실행문 영역 {}안에서 반복(루프)를 종료할 수 있게 만들어 줘야한다.
-3) 구조

int i = 0; //변수 = 초기값;
int sum = 0; //변수 = 초기값;
while (i < 10) {
    sum += i + 1;
    i += 1; //증감식
}
System.out.println(sum);

#1. 반복의 횟수를 알때

#2. 무한반복 : 반복횟수가 달라질때
while(true){
반복해서 실행할 명령문.....
if(조건){break;} //종료시점이 반드시 필요함!!!
}

 


👉 반복문 do-while  (잘 안씀)
선 실행 후 비교 : 실행 먼저한 후 조건 검사하는 형태

-1) 구조

int i = 1;
int result = 0;
do {
    result += i; //반복해서 실행할 명령문...
    i += 1;
} while (i < 2); //; 꼭붙일것
System.out.println(result);



👉 반복문 for 
지정된 수만큼 반복할때 사용
-1) 구조

int sum = 0; //변수 = 초기화

for (int i = 0; i < 10; i++) { //초기식, 조건식, 증감식 순서대로~
    sum += (i + 1);
}
System.out.println(sum); //반복해서 실행할 명령문들


1번 -> 2번(조건이 참이면) -> 3번 -> 4번 -> (2 -> 3 -> 4) -> 2번 (거짓-> 종료!)
초기식 : for 문 처음 시작할때 한번만 실행.
조건식 : 결과가 true/ false 되도록
증감식 : 1씩 증/감 할때는 증감연산자(++;) 주로 사용  

 

 

👉 반복문 for each문

배열이나, Collection등에 사용이 가능 / 배열의 값들을 하나하나 변수에 담아서 출력.

-1) 구조

for (String day : days) { //days라는 배열을 day라는 변수에 담아서 출력~
    System.out.println(day);
}


👉 객체 지향 코드 재사용성이 높다 : API 사용
코드 관리가 쉽다 : 상속, 다향성, 추상화. 캡슐화
신뢰성이 높은 프로그램 개발 가능

-1) 캡슐화 (encapsulation) : 자바가 지향하는 코드 스타일
-2) 상속 (inheritance)
-3) 다형성 (polymorphism)
상속관계에서 성립
같은 이름의 기능이 클래스나 객체에 따라 다르게 동작하도록 구현되는 것.



👉 클래스와 객체
-1) 클래스 (설계도) == 붕어빵 틀
객체를 정의해 놓은 것, 용도는 객체를 만들기 위한 것

-2) 객체(인스턴스) == 붕어빵
실제로 존재하는 것, 클래스 모양 (설계) 그대로 생성된 실체

-3) 객체 : 속성 + 기능
속성과 기능을 통틀어 맴버라고 부른다.
속성 : 맴버변수, 필드
기능 : 매서드 

-4) 객체를 생성과 사용

class Phone { //Phone 이라는 클래스
    String model; //변수(속성)와 메서드(기능)
    String color;
    int price;
}

public class Main {
    public static void main(String[] args) {
        Phone galaxy = new Phone(); //Phone의 속성을 가진 galaxy 인스턴스 생성
        galaxy.model = "Galaxy10";
        galaxy.color = "Black";
        galaxy.price = 100;
        
        Phone iphone =new Phone(); //Phone의 속성을 가진 iphone 인스턴스 생성
        iphone.model = "iPhoneX";
        iphone.color = "Black";
        iphone.price = 200;
        

        System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
        System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
    }
}


#1. 클래스명은 첫글자 대문자, 숫자로 시작 X, 띄어쓰기 X, 특수기호 _ $ 만 허용
패키지내 클래스명은 한개만 존재해야함.

#2. 객체 생성
**선언**
클래명 참조변수명; : String str;


**생성**
참조변수명 = new 클래스 명 ()

**선언 + 생성 **
클래스명 참조 변수명 = new 클래스명 ();
Scanner sc = new Scanner();

참조 변수 (레퍼런스 변수) : 객체를 가르키는, 객체의 주소 (레퍼런스)
new : 클래스 모양의 메모리를 점유하는 문법적으로 중요한 키워드

 

#3. 객체 사용
참조변수명.변수 = 값;
참조변수명.메서드();


 ---> 정리
클래스 == 사용자 정의 데이터 타입
기본형 : 메모리 양이 정해진것
클래스 : 개발자가 필요한 만큼 메모리 크기를 직접 지정해서 만든것.
클래스 : 유사한 특징을 지닌 객체들의 속성과 기능을 묶어 놓은 집합



👉 변수의 종류
: 선언 위치(어디서 변수가 만들어졌느냐)에 따라 변수의 종류와 성질이 달라짐.

-1) 클래스 변수  (static 변수)
- 클래스 안에 생성 (메서드 밖)
- 이름앞에 static 키워드가 붙는다

- 종류 : 클래스 기본형 변수(int string) / 클래스 참조형 변수(tv.. /
- 특징 : 모든 객체들이 공유하는 변수
 프로그램시작하면 먼저 한번만 로딩하고,
 new로 객체생성하지 않아도 바로 사용가능.
- 접근방법 
클래스명.변수명
참조변수명.변수명

-2) 인스턴스 변수 
- 클래스 안 생성 (메서드 밖)
- 종류 : 인스턴스 기본형 변수 / 인스턴스 참조형 변수 
- 특징 : 각 객체(인스턴스)의 개별적인 저장 공간 갖는다.
new~ 로 객체생성한 후 메모리가 점유되면 사용가능.
가르키는 참조변수가 없을 경우 가비지 컬렉터가 수거 or 프로그램 종료시 소멸됨.
- 접근 방법
참조변수명. 변수명

-3) 지역 변수   
- 메서드 안 생성
- 종류 : 지역 기본형(int, char 소문자) 변수 / 지역 참조형(Scanner, String 대문자) 변수
- 특징 : 메서드 (,조건문 , 반목문) 내에서 선언된 변수를 가르키며, 메서드 종료시 소멸

# 메모리 로딩순서
클래스 영역-> static -> main 실행 -> (new~~) 인스턴스 생성 
:클래스 범위 만들고
| static 붙은 아이들 모두 로딩
|메인 있다면 실행
| new로 객체 생성된 아이들 실행


클래스 : 변수 + 메서드

👉 메서드 method
-1) 메서드 : 함수
어떠한 작업을 수행하기 위한 명령문들의 집합. main()도 메서드
메서드 -> 연산을 처리하는 곳
변수 -> 그 결과를 저장하는 곳
메서드는 어떤 값을 입력 받아 처리하고, 그 결과(하나만)를 돌려준다. (입력값, 리턴값 유/무)

목적, 장점 : 재사용 : 반복적인 코드를 줄이고 코드 관리가 용이함.
ex) System.out.println(); 출력해주는 메소드

-2) 메서드의 정의와 사용
#1. 입력값 x , 리턴값 x
#정의
리턴타입 메서드명(){
실행할 코드들
}


#사용(호출)
메서드명();

#2. 입력값 o , 리턴값 o

int add(int x, int y) { //타입 파라미터명, 타입 파라미터명
    int result = x + y; //실행할 코드
    return result; //리턴값
}


#사용
메서드명(인자, 인자,....); 


-3) 용어 정리
리턴타입 : 메서드의 작성된 코드를 실행하고 리턴해주는 결과의 타입.
모든 타입이 될 수 있고, 리턴해줄것이 없다면 void 라고 작성.

메서드명 : 변수명명규칙 참고 (소문자) , 무슨 작업을 하는지 유추 가능한 이름으로 만들기
파라미터 : 매개변수, arguments
메서드를 실행할때(부를떄) 외부에서 던져주는 데이터를 받아주는 변수
메서드에 입력받을 값을 담아주는 변수
외부에서 던져주는 값이 없다면 괄호안 비워두기

return   : 함수를 호출한 곳으로 값을 돌려주는 키워드
1) 메서드를 종료시킴
2) 뒤에 작성한 값을 호출한 곳으로 
리턴타입이 void가 이 아닌 이상 반드시 return 값이 있어야한다.
리턴타입과 return 뒤에 기입할 데이터의 타입이 동일해야함.
void 타입에서도 어떤 조건에 의해 메서드가 중간에 강제종료하고 싶을때는 return; 값 없이 키워드만 사용가능
인자(파라미터) : 매개변수, 인수, 인자값, 인수값, 파라니처, arguments
메서드 호출시, 메서드에게 던져줄 데이터를 말함.

🔥 인자와 파라미터의 개수/순서/데이터타입은 반드시 일치해야함.

-4) 메서드의 종류
#1. 클래스 메서드 : static이 붙은 메서드 (객체 생성안하고❌ 바로 사용가능)

#2. 인스턴스 메서드 : 일반메서드 (객체 생성✔️ 후 사용가능)
(같은 클래스안에 있는 애들을 부를때는 메모리 생성 시기가 같아서 객체생성 안해도 됨.)

-5) main() 메서드
public static void main(String[] args){
}

 


👉 메서드 인자 전달 방식
자바의 인자 전달 방식은 "값의 의한 호출 : Call-by-value" 이다.
호출하는 곳에서의 인자값이 복사되어 파라미터에게 전달된다.

1) 기본형 값 전달 : read only : 값만 복사해줌. 원본 훼손 x
2) 참조형 값 전달 : read & write : 객체의 레퍼런스(주소값)이 전달된다.



👉 JVM 메모리 구조
RAM OS가 관리
JVM이 OS로 부터 메모리 할당 받음 (Runtime Data Area)
5개 영역, Class Area (= Method Area), Call Stack, Heap, Native Method Stack Area, Pcredgister

1) Method Area : static 이 붙어있는 것들의 영역. 
2) Call Stack : 현재 실행중인 메서드들이 차지하는 메모리 영역.
3) Heap : new ~~~ 로 생성되는 모든것들
4) Native : c/c++과 연동하는 작업을 함.


👉 재귀호출 recursive call
메서드 안에서 자기자신을 호출하는 것을 말함.



👉 메서드 오버로딩 method overloading    **중요함**

-1) 한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른
여러개의 메서드를 중복 작성 가능.
자바 다형성의 한 경우

-2) 조건 
1 - 메서드의 이름이 같아야한다.
2 - 매개변수의 개수 또는 데이터타입이 서로 달라야한다.

🔥 매개변수의 이름이 다른것은 조건에 해당 안됨.
     리턴타입도 오버로딩 조건에 해당 안됨.



👉 생성자 (Constructor)
1) 객체가 생성될때, 객체의 초기화를 위해 사용되는 메서드.
모든 클래스에는 생성자가 있으며, 생성자가 기술이 안되어있으면,
"기본 생성자"가 눈에는 안보이지만 자동으로 아무것도 없는 형태로 만들어지고 호출된다.

2) 초기화 3가지 방식
#1. 생성자 : 인스턴스 변수를 초기화할때 많이 사용


#2. 초기화 블럭 : 클래스 블럭 / 인스턴스 블럭
(주로 안드로이드 할때)
초기화 블럭도 인스턴스 변수를 초기화할때 사용될 수 있는데
생성자와 블럭 둘다 있으면 순서가 블럭이 먼저다.
*구 조 *
#클래스 블럭
static {
// 초기화 코드 작성....
}

#인스턴스 블럭
{
// 초기화 코드 작성....
}

#3. 명시적 초기화 (int a = 10;)

-3) 생성자 선언 및 활용
- 객체가 생성되는 순간에 new를 통해 자동으로 단 한번만 호출된다. (반면, 메서드는 필요할때마다 호출가능)
- 생성자의 이름은 반드시 클래스 이름과 동일
- 리턴타입 없다. (return; 키워드는 사용가능)
- 매개변수 지정 가능.
- 생성자는 오버로딩 할 수 있다.
- 목적은 객체생성시, 필요한 초기 작업을 하기 위함이다.
변수 초기화, 필요한 메모리 확보, 파일 열기, 네크워크 연결 등 객체 활동전 필요한 초기 준비시 이용

-4) 구조

class Phone {
    String model;
    String color;
    int price;

    Phone(String model, String color, int price) { //타입 파라미터,타입 파라미터,타입 파라미터
        this.model = model; //초기화 시키는 코드들...
        this.color = color; //초기화 시키는 코드들...
        this.price = price; //초기화 시키는 코드들...
    }
}

 


👉 기본 생성자 (default contstructor)
-1) 매개변수없는 생성자
클래스명(){}


-2) 클래스 생성자가 하나 이상은 반드시 존재한다. (객체 생성시, 반드시 한번 실행.)
클래스에 작성된 생성자가 하나도 없으면 컴파일러가 자동으로 기본 생성자를 추가하고 실행해서 객체 생성한다.

-3) 매개변수 있는 생성자가 작성되어 있을 경우, 컴파일러는 기본 생성자를 만들어 주지 않는다.


Python 기초문법(1)


👉 문자열 다루기

 Q 문자열 연산

first_name = "Harry"
last_name = "Potter"

first_name + last_name  # HarryPotter
first_name + " " + last_name  # Harry Potter

 

Q 문자열 길이 구하기

print(len("abcde"))           # 5

 

Q 모든 알파벳을 대문자/소문자로 바꾸기

sentence = 'Python is FUN!'

sentence.upper()  # PYTHON IS FUN!
sentence.lower()  # python is fun!

 

Q 특정 문자를 기준으로 문자열 나누기

# 이메일 주소에서 도메인 'gmail'만 추출하기
myemail = 'test@gmail.com'

result = myemail.split('@') # ['test','gmail.com'] 

result[0] # test (리스트의 첫번째 요소)
result[1] # gmail.com (리스트의 두 번째 요소

result2 = result[1].split('.') # ['gmail','com']

result2[0] # gmail -> 우리가 알고 싶었던 것
result2[1] # com

# 한 줄로 한 번에!
myemail.split('@')[1].split('.')[0]

 

Q 특정 문자를 다른 문자로 바꾸기

txt = '서울시-마포구-망원동'
print(txt.replace('-', '>')) # '서울시>마포구>망원동'

 

Q 문자열 슬라이싱

f="abcdefghijklmnopqrstuvwxyz"
f[1]   # b 파이썬은 숫자를 0부터

f[4:15]  # efghijklmno           f[4]부터 f[15] 전까지, 총 15-4=11개!

f[8:]    # ijklmnopqrstuvwxyz    f[8]부터 끝까지, 앞의 8개 빼고!
f[:7]    # abcdefg               시작부터 f[7] 전까지, 앞의 7개!

f[:]     # abcdefghijklmnopqrstuvwxyz  처음부터 끝까지

 

Q 특정 문자열 자르기

myemail = 'elicho91@kakao.co'

domain = myemail.split('@')[1].split('.')[0]
print(domain)

👉 리스트와 딕셔너리

-1) 리스트 : 순서가 있는 다른 자료형들의 모임

Q 리스트 길이 구하기

b = [1, 3, [2, 0], 1]
print(len(b))   # 4

 

Q 인덱싱과 슬라이싱

a = [1, 3, 2, 4]
print(a[3])  # 4
print(a[1:3]) # [3, 2]
print(a[-1]) # 4 (맨 마지막 것)


Q 리스트 중첩

a = [1, 2, [2, 3], 0]
print(a[2])      # [2, 3]
print(a[2][0])   # 2


Q 덧붙이기

a = [1, 2, 3]
a.append(5)
print(a)     # [1, 2, 3, 5]

a.append([1, 2])
print(a)     # [1, 2, 3, 5, [1, 2]]


# 더하기 연산과 비교!
a += [2, 7]
print(a)     # [1, 2, 3, 5, [1, 2], 2, 7]


Q 정렬하기(소팅)

a = [2, 5, 3]
a.sort()
print(a)   # [2, 3, 5]
a.sort(reverse=True)
print(a)   # [5, 3, 2]


Q 요소가 리스트 안에 있는지 알아보기

a = [2, 1, 4, "2", 6]
print(1 in a)      # True
print("1" in a)    # False
print(0 not in a)  # True

 

-2) 딕셔너리 : 키(key)와 밸류(value)의 쌍으로 이루어진 자료의 모임

person = {"name":"Bob", "age": 21}
print(person["name"])


Q 딕셔너리 값 업데이트/새로운 쌍의 자료 넣기

person = {"name":"Bob", "age": 21}

person["name"] = "Robert"
print(person)  # {'name': 'Robert', 'age': 21}

person["height"] = 174.8
print(person)  # {'name': 'Robert', 'age': 21, 'height': 174.8}


Q 딕셔너리의 in 딕셔너리

person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"])             # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"])  # 92


Q 딕셔너리 안에 키가 존재하는지 확인하기

person = {"name":"Bob", "age": 21}

print("name" in person)       # True
print("email" in person)      # False
print("phone" not in person)  # True


-3) 리스트와 딕셔너리의 조합

people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'

👉 조건문 (if, elif, else)

age = 27
if age < 20:
    print("청소년입니다.")
elif age < 65:
    print("성인입니다.")
else:
    print("무료로 이용하세요!")

👉 반복문

fruits = ['사과', '배', '감', '귤']

for fruit in fruits:
    print(fruit)

 

Q 리스트 안에 가장 큰 숫자 구하기

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

max_value = 0
for num in num_list:
    if num > max_value:
			 max_value = num

print(max_value)

print(max(a_list))

👉 함수

def bus_rate(age):
		if age > 65:
		    print("무료로 이용하세요")
		elif age > 20:
		    print("성인입니다.")
		else:
		    print("청소년입니다")

bus_rate(27)
bus_rate(10)
bus_rate(72)

🙋‍♂️ 소감 : 

오늘은 자바의 꽃 '객체지향'을 복습하고, 내배캠 강의자료와 이전에 메모해뒀던 내용들 위주로 정리해보았다.

예전엔 자바를 끝내고 파이썬을 했을때 문법이 헤깔렸는데, 이번에 자바를 하면서 파이썬을 같이 보니까 더 헤깔린다 ^^;

헤깔리지 않게 정리를 확실히 해두어야겠다.

😈 아는 내용이라고 그냥 넘어가는건 금물! 😈

'❤️‍🔥TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2022-11-10(9day)  (1) 2022.11.10
[TIL] 2022-11-09(8day)  (0) 2022.11.09
[TIL] 2022-11-07(6day)  (0) 2022.11.07
[TIL] 2022-11-04(5day)  (0) 2022.11.04
[TIL] 2022-11-03(4day)  (0) 2022.11.03

댓글