728x90

 

OOP 공부하면서 캡슐화 개념 이해 + 입출금 잔액조회

코드 해보기!

머릿 속에 다른 클래스의 인자에서 해당 클래스의 매개변수로 데이터 넣기가 포인트 찍힘

 

 

package chap05_OOP.A_encapsulation;

public class Run {

	public static void main(String[] args) {

		
		Encapsulation01 encap = new Encapsulation01();
		encap.deposit(100);
		encap.withdraw(50);
		encap.withdraw(150);
		encap.checkBalance();
	}

}

 

728x90
반응형
728x90

 

변수란?

하나의 값을 저장할 수 있는 공간

메모리에 값을 저장할 수 있는 공간

변수는 상자

*전역변수 = 멤버변수 = 멤버필드 = 필드 : 클래스영역에 작성하는 변수

 

변수의 선언이란?

메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

변수의 선언 : stack에 뭔가 공간에 잡히는 것

  • stack : 컴퓨터가 사용하는 영역
  • heap :개발자가 사용하는 영역
  • static : 공용으로 사용할 수 있는 공간

선언하다 : stack에 변수명의 공간이 잡히는 것

int age; // 선언하면 stack에 4byte짜리(int 공간) 공간하나가 생긴다

값을 대입한다 : 변수에 값 저장

초기화 : 변수에다 값을 처음 넣는 것. 객체 선언을 하고 값을 최초로 할당하는 것

변수의 값 대입

대입연산자(=)**를 이용하여 오른쪽에 있는 값(리터럴)을 왼쪽에 넣는다(변수)

 

데이터타입 2가지

1.기본형(primitive)

  • boolean(논리), char(문자), String(문자열),
  • byte, short, int, long // double, float

2.참조형(non-primitive)

 

접미사

대소문자 모두 가능하나 관용적으로 long의 L은 대문자로

long = 0L

float = 0f

double = 0 또는 0d

 

위의 자료형명대소문자 구분 확실히!

-Double 대문자면 클래스로 쓰일 수도 있어 완전 쓰임새가 달라짐

 

int가 정수형의 기본이 된 이유

    - 4byte가 컴퓨터가 계산하기 좋은 크기라서라고 함

double이 실수형의 기본이 된 이유

    - 소수점이 있는 실수를 정확하게 계산할 수 없음(오차발생 필연적). 부동소수점. 최대한 오차를 줄이기 위해 double이 8바이트지만 기본형이 됨.

 

 


 

변수 명명규칙

(클래스명에도 적용됨)

1.대소문자 구분되며, 길이 제한이 없다

길이 제한이 없는 이유 :예약어(reserved word) 때문

 

2.예약어(reserverd word)를 사용하면 안된다

ex) true, final, String 등

 

3.숫자로 시작하면 안된다

ex)age1은 가능하지만 1age불가

 

4.특수문자는 ‘_’와 ‘$’만을 허용한다

-’$’는 내부 클래스에서 사용

-’_’ 사용 시 컴파일 에러는 없지만 관례상 사용하지 않는 것이 좋음

ex)sh@rp는 불강하지만 $harp는 가능

 

5.여러 단어 이름은 단어의 첫글자를 대문자로 한다

(단, 첫 시작 글자는 소문자로 하는 것이 관계)

ex)ageOfVampire,userName

 

클래스명 첫글자 대문자

세미콜론( ; )의 의미 : 한문장의 마침을 알림

 

 

 

※ 변수, 인자, 매개변수 구분

  • 변수 인자 매개변수 구분인자는 값을 넣는 쪽
  • 파라미터는 값을 받는 쪽
  • 각각 변수의 종류

 

728x90
반응형
728x90

 

JAVA1 - 12.4 직접 컴파일하고 실행하기 : 라이브러리 사

cmd

OkJavaGoInHome.java 입력

import org.opentutorials.iot.Elevator;

→ 의미 : org 밑에 opentutorials 밑에 iot 밑에 Elevator 불러 상태. Elevator 치면 이녀석인 . OkJavaGoInHome.java 같은 디렉토리에 있는 org폴더에 opentutorials폴더에 iot폴더 안에 있는

     - import '불러오다'라는 뜻

     - org부터 iot까지 패키지라고 부름

 

개념정리

Elevator.java 컴파일하면 Elevator.class파일이 생기고, 클래스 파일을 로딩하는 코드가 import org.opentutorials.iot.Elevator; 이것. 이런 절차로 Elevator 사용할 있게 된다

 

-classpath = -cp

 

이렇게 다른 라이브러리를 끌어와 쓸 때 필히 경로지정이 필수인데 이 경로가 변경될 경우 로딩시 에러난다.

어떻게 해결할까?

여기서 찾아주세요 하는게 --class-path 또는 -cp

(현재 디렉토리에서도 찾아야 하니 .이라고 치고, 윈도에서는 ;세미콜론으로 구분하고 ,리눅스에서는 :콜론)

 - 새경로 지정 & 컴파일 명령어 : javac -cp ".;폴더명" 파일명

 - ex) javac -cp ".;lib" OkJavaGoInHome.java

 

위의 경우 lib폴더 같은 경로에 있으면 찾아지나 lib폴더 밑에있다면 에러뜬다. lib 안에 있다고 명시적으로 컴퓨터한테 알려줘야한다

 - java -cp "lib" OkJavaGoInHome : 명시적으로 "lib"이라고 해줘야 lib에서만 찾게됨. 같은 디렉토리에서는 찾지않음

 - java -cp ".;lib" OkJavaGoInHome : 현재디렉토리라는 의미의 .; 추가

 

 

※ 소프트웨어는 혼자 만드는게 아닌 다른 사람들이 만든 라이브러리들 이용해서 나의 소프트웨어를 만들어가는 것이기에 다른 사람들이 만든 라이브러리 살펴보는 것은 견문을 넓히는 중요한

 

 

 


 

 

JAVA1 - 12.5 직접 컴파일하고 실행하기 : 입력과 출력

컴파일시 입력값을 줘서 입력값에 따라서 다르게 동작하는 프로그램을 어떻게 실행시킬지 알아볼

 

javac OkJavaGoInHomeInput.java 컴파일하면 OkJavaGoInHome.java class파일이 생기고,

파일이 쓰는 다른 class파일들도 자동으로 컴파일 된다

 

args 프로그램의 입력값을 받는 녀석

args 같아야함

들어오는 값은 args[0] 두번째 값은 args[1] 써서 가져올 있음

 

*첫째값과 두번째값을 주는 방법

첫번째값, 두번째값 표시는 띄어쓰기

cmd 명령어 : java OkJavaGoInHomeInput "Java APT 507" 15.0

                                                        (첫번째값)    (두번째값)

메커니즘

첫번째값 Java APT 507 args[0]으로 들어가서 String id String타입 id값이 되고,

두번째값 15.0 args[1] 들어가서 String bright String타입 bright 값이 되는

 

그럼 id bright 들어가 있는 아래의 Elevator(id), Security(Id) 등에 변수로 한번에 적용되는 메커니즘이다

 

 

cmd에서 인수(args) 넣을 첫번째값,두번째 값을 아래처럼 바꾸면 된다

 

 

 

 

 

728x90
반응형
728x90

 

JAVA1 - 11.1. 입력과 출력

프로그램은 들어오는 정보인 입력을 처리해서 출력을 만들어내는

우리가 사용하는 프로그램의 입력값을 어떻게 주는지 알아볼

다양한 것들이 입력값이 될 수 있는데

 

Argument : 프로그램을 실행할 어떤 텍스트 정보를 주는

File : 어떤 파일의 내용을 읽어서 입력되는 경우, 파일의 내용이 입력값

Network : 웹사이트 이용으로 정보를 받아서 쓰는 것도 입력

Audio : 말을 해서 프로그램이 이걸 알아듣는 경우 ex) iPhone Siri

Program : 다른 프로그램이 실행한 출력결과를 입력 받아 쓰는 경우

 

 

id값을 프로그램 실행시마다 바꾸는건 상당히 피곤한

사용자가 텍스트값을 입력해서 세팅할 있게 있을까?

검색 : java popup input text swing

JOptionpane 기능 쓸려면 임포트

 

복수 데이터를 입력하고 싶다면?

JOptionpane 가진 변수 하나더 만들어서 두번 받기

String id = JOptionPane.showInputDialog("Enter a ID");

String bright = JOptionPane.showInputDialog("Enter a Bright level");

 

 

import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Security;


// Elevator call
Elevator myElevator = new Elevator("JAVA APT 507");
myElevator.callForup(1);


// Security off
Security mySecurity = new Security("JAVA APT 507"); // 누구의 시큐리티인지 알리기해 ()작성
mySecurity.off();


// Light on
Lighting hallLamp = new Lighting("JAVA APT 507 / Hall Lamp"); // 자바 아파트 507호의 홀램프라는 의미
hallLamp.on();


Lighting floorLamp = new Lighting("JAVA APT 507 / floor Lamp");
floorLamp.on();


DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
moodLamp.setBright(Double.parseDouble(bright)); //setBright()가 실수만 받아서 str을 double로 컨버팅하는 .parseDouble() 메소드사용
moodLampe.on();

 

 


 

JAVA1 - 11.2 . 입력과 출력 : arguments & parameter

 

parameter = 매개변수

args = arguments = 인자

 

args 얘도 변수

프로그램과 프로그램을 사용하는 사람 사이에 값을 매개해준다고 해서 매개변수라고 한다

 

*개념

arguments 값이 public static void main(String[] args) { 부분의 args 들어간다

위의 String[](대괄호가 붙은 문자열) 문자열로만 이루어져 있는 배열이라고 하는 데이터

(배열은 추후 배울 예정이니 지금은 스킵)

 

핵심은 args 사용자가 입력한 값이 들어올 것이고, {} 안에서는 args 사용자가 입력한 값이다

args에서 첫번째 값은 0이다. (프로그램에서는 0부터 시작하는게 )

두번째는 1

 

 

자바에서 입력값을 받는 방법은

JOptionPane.showInputDialog("");

같은 방법도 있지만 일반적으로는 인자(args) 사용한다

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90

015. 함수 filter, lambda

 

 

일단 필터함수랑 람다함수 각각 먼저 알아보자

 

1.filter()

  • 걸러낸다는 뜻. 함수도 동일한 의미
  • 두번째 인수(반복 가능한 자료형) 첫 번째 인수(함수명)에 입력되었을 때,  '반환 값이 참인 것만 걸러 내서 돌려준다.'

 

1)형태

filter(function, iterable)
filter(함수명, 반복가능한 자료형)

 

2)세부 내용

filter(함수명, 반복가능한 자료형)

  • 함수명(function) : True or False로만 반환
  • 반복가능한 자료형(iterable) : 함수에 차례로 들어갈 반복 가능한(iterable) 인수(instance)
instance
클래스로 만든 객체

 - 객체와 구분, 어떤 클래스의 객체인지 관련지어 얘기할 때 인스턴스라고 부른

 

3)특징

  • 여러 데이터 중에 일부만 추려낼 때 사용
  • 따라서, 보통 list,tuple을 대상으로 주로 사용함
  • filter()는 filter값으로만 리턴함
  • 결과값이 참인 것만 결과값을 돌려줌. False는 다 버리고 True만 줌
  • filter() 함수의 결과값을 list로 변환하는 가장 쉬운 방법은 list() 내장 함수를 사용하는 것.
  • 마찬가지로 tuple도 내장함수 tuple() 사용

 

이제 직접해보자

보다시피 filter()가 filter값으로 낸다는 의미를 알것이다. 이상한 숫자와 알파벳이 섞여있다

이를 사람이 알기 쉽게 변환할 수 있도록 하는게 list나 tuple로 바꿔주는 것이다. 그래서 아래에서 list()를 추가하였고, 

0보다 큰 [1,2] 값을 리턴한 것.

 

filter() 함수를 쉽게 한마디로 설명하자면 def 함수와 연계하여 함수의 조건을 충분하는 True값만 걸러서 추출한다고 생각하면 되겠다

 


2.lambda

def와 동일한 역할을 하는 녀석

1)형태

lambda 매개변수1,매개변수2... : 매개변수를 이용한 표현식

 

* 매개변수(parameter)와 인자(arguement)란?

def add(x,y):  # (x,y)가 매개변수(parameter)
	return x + y
    
z = add(4,-5)  # (4,-5)가 인자(argument)
print(z)

위의 def 함수를 lambda 함수로 전환해보면,

# lambda 함수로 변환

add = lambda x,y : x + y
z = add(4,-5)
print(z)

실제로 해보면, 결과값 또한 똑같게 잘나온다

 

2)특징

언제 사용하는가?

def를 사용할 필요없이 간단하거나, def를 사용할 수 없는 곳에 주로 사용

위의 filter() 함수식은 람다함수를 사용하면 더 간편하게 코드 작성가능

 

 

 

728x90
반응형

+ Recent posts