객체지향 언어 : 객체를 선언한 후, 그 객체에 관한 내용(관계)을 프로그래밍함 => C++, C#, Python, JS, Java

 

Obj 객체란? 구체적, 추상적인 데이터 단위 

객체를 정의하고, 객체가 제공하는 기능을 구현, 그 기능들 간 메시지(파라미터/객체) 전달을 통해 객체간의 관계(협력), 속성을 구현

> 객체를 정의 (class ObjName)

> 객체의 속성을 멤버변수로, 역할을 메서드로 구현

> 객체간의 협력을 구현

ex)

public class UserInfo {

// 멤버변수

String id;

String password;

String name;

String address;

int phone;

}

Funtion 함수란?

스택메모리 : 함수가 호출될때 지역변수들이 사용하는 메모리

하나의 기능을 수행하는 코드로 호출 여러곳에서 가능, 호출하지 않으면 사용되지 않음, 호출시 return하여 반환해줌

ex) 반환타입 함수명 (매개변수) { 코드 }

return 값 없는 함수 = void 타입

return 타입 = 함수 타입

 

return 값을 출력하려면  main함수에서 변수에 담아서 출력가능

변수에 담아주지 않으면 void형인 sayHello 함수 실행결과만 출력된다.

 

지역변수 = res, num1, num2, sum, i

 

 

 

 ※ 메서드와 차이점 

> 함수 : 단독으로 존재

> 메서드 : 객체의 기능으로 클래스 안에 속함, 클래스 안의 멤버변수를 사용하며, 멤버 함수라고도 한다.

 

객체의 속성 = 멤버변수

객체의 기능 = 메서드

 

 

클래스 활용

class 객체A {
    멤버변수, 메서드 선언;  }

class 객체B {
   main 함수 {
      객체A  참조변수 = new 객체A() ; // 인스턴스 생성  
      참조변수.멤버변수 = 값; ...    }
 }

getter 메서드:  변수값을 얻는 메서드

setter 메서드: 변수값을 재설정 하는 메서드

 

객체 A를 B에서 사용할때

> new 키워드를 사용하여 인스턴스를 생성 

> 참조변수(타입 = 객체A) 를 이용하여 멤버변수 or 메서드에 접근, 값 변경 가능함

 

ex)

학생 정보를 출력하는 객체를 생성 (=객체A)                        ->           학생을 만들어줌 (=객체B)

 

인스턴스란?

> new키워드를 통해  클래스를 메모리에 생성한 상태

> 실제 클래스 기반으로 생성된 인스턴스 객체는 각각 다른 멤버변수 값을 가짐

 

힙메모리 (동적메모리)

변수를 사용할때 메모리 할당(new 키워드)  > 사용하지 않으면 할당해제됨

> 메모리 주소 : 참조변수가 가르킴  =>  println(참조변수) // 메모리 주소 출력

> 참조 값: 생성된 인스턴스의 메모리 주소 값

 

생성자란?

> 클래스 이름과 동일, 반환값 없음

> 객체를 생성하기 위해 new키워드 뒤에 오는 것 => 위 코드에서는 StudentInfo 임

> 접근 제어자를 통해 외부에서 접근하지 못하도록 가능

> 클래스에 생성자가 하나도 없는 경우에만 디폴트 생성자가 생김

** 생성자를 생성하고 멤버변수 값을 설정하지 않으면 null, 0으로 할당됨 == 디폴트 생성자

 

ex) 디폴트 생성자 

ex) 클래스에 이미 생성자 존재시

#오류

# 디폴트 생성자 추가

 

생성자 여러개 정의 = 오버로딩

 

 Overriding 

> 상의 클래스에 정의된 메서드내용을 하위 클래스에서 동일한 이름의 메서드로 재정의 하는 것

 

메서드의 이름은 주소값을 나타냄

메서드 내의 변수는 스택 메모리에 위치, 다른 인스턴스라도 같은 메서드 호출

ex)

 다형성 

> 하나의 코드가 여러 자료형으로 구현되어 실행되는 것으로 같은 코드에서 여러 실행결과  출력

> 유연, 확장성있는 프로그램 제작 가능

> 여러 클래스의 하나의 상위 클래스 타입(Animal)으로 핸들링 가능

[내일배움카드], [국비지원교육]

토익 시험 준비하느라 2주차 강의는 별로 듣지 못했다고 한다,,,

그래도 내일배움카드는 잘 사ㅏ용해야지!

 

1/28일  ch1 -14 ~16 (조건문)

 

< if-else문 >

조건이 여러개일때의 if문을 배우고 

학점계산기를 만들어 보았다.

 

90점 이상이면 A

80점 이상이면 B

70점 이상이면 C

그 이하 점수일땐 F를 출력하도록 코드를 짰다.

 

Scanner 함수를 이용해 점수를 입력받았다.

이때 import scanner을 해줘야 한다.

그리고 Scanner 객체를 생성해준다.

 Scanner scanner = new Scanner(System.in); 

 

 

 

 

 

 

< if-if문 > 여러 조건이 존재시 사용한다.

 

if-else문과 다르게 여러 출력이 나올 수 있음

위 코드로 if-if를 사용한다면 grade가 97점일땐 출력이 여러개가 된다.

3개의 if 조건을 만족하기 때문에.

하지만 else문은 조건을 만족하지 않을때만 실행되기 때문에 실행되지 않고

최종출력은 A+ A B 가 출력

grade가 89일땐 B만 출력

 

< switch-case문> 

 

if-else문의 코드를 더 짧게 줄여 가독성을 향상시킬 수 있다.

비교조건이 숫자거나 문자열 등 특정 값으로 나타낼 수 있는 경우 용이하게 사용가능

break 사용시 더 내려가지 않고 바로 switch문을 탈출한다.

 

ex)month 입력시 달의 일 수를 출력해준다.

Java14부터는 쉼표로도 가능, 명령어 여러개 일경우에는 { } 사용하고 리턴값은 yield를 사용한다.

변수 = switch문~~ 으로 사용시 변수 =값 대신 리턴값만 작성시 변수에 바로 리턴된다!!

 

 

1/31일  ch1 -17 ~21 (반복문)

< while문 > 

조건에 만족되면 만족하지 않을때까지 계속 수행

while(조건){ 수행문 } 

< do-while문 >

do { 수행문 } while(조건);

일단 do문을 실행하고 조건에 만족시 while문 수행 => 또 조건 만족시 do문 실행

< for문 >

횟수가 정해질때 편리

for (초기화; 조건; 증감식) { 수행문 }

 

while / do-while / for문 비교

ex) i =0부터 i에 카운트 횟수를 더하는데 카운트가 10이 될 때까지만 반복하는 코드

 

< 중첩반복문 >

너무 많은 반복문 사용시에 시간이 너무 많이 소요된다.

변수를 두개 사용할때 유용하게 사용가능

 

< break-continue문 >

- break : 제어문에서 탈출하는 기능으로 n중 반복문일때는 break가 타이핑 된 반복문 하나에 대해서만 탈출하고 밖에 반복문을 계속 실행

Ex)

 

이때 곱한값이 20보다 크면 break가 걸린다.

그럼 i=1,2일때는 20보다 클 수 없어서 다 출력되고

i가 3일때는 3*6 이후부터는 20이 넘으므로 출력되지 않을것이다.

 

 

 

 

result >

 

[내일배움카드], [국비지원교육]

1/20일  ch1 -01~09 (자료형)

배운 내용

이클립스 설치

변수, 자료형을 학습했다.

이전에 공부해본 적이 있어서 어렵지 않은 부분이였지만

자료형 범위는 주의 해야 한다.

정수) byte = 8bit, 범위는 -128 ~ +127

정수) int = 4byte로 32비트 내  –2,147,483,648 ~ 2,147,483,647

long = 8byte으로 숫자 뒤에 L을 써줘야 한다.

실수) float 형: 지수부 8bit/ 기수부 23bit

                    : 숫자 뒤에 F를 써서 double형과 구분해준다.

실수) double형: 지수부 11bit/ 기수부 52bit

자바에서 실수는 기본적으로 dobule형

 

같은 숫자여도 둘이 같지 않다.

문자형 char 

아스키코드 A ~ = 65~  단 음수는 대입 할 수 없다.

char ch = A  /    int(ch) = 65System.out.println(ch1);  // A출력
System.out.println((int)ch1); // 65출력

 

 

설치하고 2일 후에 Version 1.8.0_211 of the JVM is not suitable for this product. version: 17 or greater is required.
에러가 발생!!!!!!
> eclipse.ini 파일에서 -Dosgi.requiredJavaVersion=1.8으로 변경
> javaw.exe의 경로를 찾아서ini파일에
-vm
경로~~~~
를 작성해주면 해결 된다.

.

 

1/22일  ch1 -10~13(연산자)

<constant>

constant (상수) 는 변하지 않는 수로 final 예약어를 사용하여 선언한다.

변수명은 대문자로 짓는것을 권장, 가독성이 좋음, 값 변경시 용이

#format : final 자료형 변수명 = 선언

ex) final int MAX_NUM = 100;

 

<literal>

숫자, 문자, 논리값

정수:int / 실수: double, float

상수풀에 있음 (프로그램이 로드되는 순간 메모리를 할당받음)

 

<형 변환>

동일한 타입끼리만 자료유실 없이 정상적으로 연산이 가능 > 형변환 후 동일 타입으로 변경해야함 (더 큰 범위의 형으로)

ex)

double dNum = 3.14;

int iNum_1 = (int)dNum; // int는 정수 이므로 iNum_1은 3이 됨

System.out.println(iNum_1); //3 출력 =>자료유실

=========

int iNum_2 = 225; 

byte bNum_2 = (byte)iNum_2; // byte 범위는 127까지 이므로 들어갈 수 없음

System.out.println(bNum_2); // 강제 캐스팅시 값이 변경되어 다른 값을 출력

<연산자> 

대입 / 부호 / 산술(사칙) /논리 / 증감 / 관계 / 조건 / 비트 연산자

@ 복합대입(다른연산자와 대입연산자가 함께 쓰임)

ex) num1 = num1 + 2   ==  num1+=2         /      num2 = num2 | num1  ==  num2 |= num1

@ 증감 

ex) i=1; res1 = ++i;  =>  res1=2, i =2  /  j=1; res2 = i++;  =>  res2=1, j =2

증감연산자가 앞에 있으면 먼저 증감시킨 후 대입 / 뒤에 있으면 대입 후 증감시킴

@ 관계 : true or false 리턴

System.out.println( i == res1 ); // true

System.out.println( j == res2 ); // false

@ 조건(삼항연산)

if (조건) { true시 결과 }

else {false시 결과}== 조건문 ? true시 결과 : false시 결과

@비트

~: 비트반전(1의보수) / << ,>> : shift 비트 이동 /  ^ : xor  /  |: or  /  &: and

 

 연산자 우선순위 : 일차식 > 단항> 산술> shift > 관계 > 비트연산 > 논리 > 조건 > 대입 

 

+ Recent posts