본문 바로가기

웹개발/Java11

캡슐화 - 정보은닉 캡슐화 - 정보은닉 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것을 뜻한다. 클래스를 만들때 이 클래스에서 만들어진 객체가 목적을 잘 수행할 수 있도록 변수와 메서드를 관련성이 있게 클래스에 구성해야 한다. 1.상속을 받지 않았다면 객체 멤버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야 한다. 2.정적 멤버는 클래스명.정적멤버 형식으로 접근하는 것을 권장한다. 정적 멤버인 경우 클래스명.정적멤버 형식으로 접근해야하는 이유는 일관된 형식으로 접근하기 위해서다. 그리고 객체를 생성한 경우에는 객체참조변수명.정적멤버 형태로도 접근할 수도 있다. 정적 멤버는 어떤 경우에 쓰나? -사람 클래스의 인구수 -고양이의 다리 개수 사람.인구, 고양이.다리개수 형식으로 접근하는 것이 홍길동.인.. 2022. 10. 14.
다형성에는 오버라이드와 오버로드가 있다 다형성에는 오버라이드와 오버로드가 있다 다형성: 사용편의성 객체 지향에서 다형성이라고 하면 오버라이딩과 오버로딩이라고 할 수 있다. 물론 상위 클래스와 하위 클래스 사이에서도 다형성을 이야기 할 수 있고, 인터페이스와 그것의 구현 클래스 사이에서도 다형성을 이야기 할 수 있지만 가장 기본은 오버라이딩과 오버로딩이라고 할 수 있다. 오버라이딩과 오버로딩 -같은 메서드 이름. 같은 인자 목록으로 상위 클래스의 메서드를 재정의 => 오버라이딩 -같은 메서드 이름. 다른 인자 목록으로 다수의 메서드를 중복정의 => 오버로딩 ride - 올라타다 load - 적재하다. 결과 다형성과 메모리 위 그림은 5번째 줄을 실행한 후 메모리 상태이다. 그림에서 주목할 것은 Penguin 클래스가 상위 클래스인 Animal .. 2022. 10. 13.
상속은 상위 클래스기능을 하위 클래스로 확장하고 재사용하는 기술 상속은 상위 클래스기능을 하위 클래스로 확장하고 재사용하는 기술 상속 : 재사용 + 확장 상속은 조직도가 아니라 재사용과 확장으로 이해하는 것이 맞다. 즉, 분류도로 이해해야 한다. 동물은 포유류의 부모가 아니다. 고래의 부모가 포유류일 수도 없다. 동물 중 분류를 조금더 세분화해서 포유류와 조류가 나온다. 포유류를 조금 더 분류해서 고래, 박쥐가 나오는 것이다. 객체 지향에서의 상속은 상위 클래스의 특성을 하위 클래스에서 상속하고 거기에 더해 필요한 특성을 추가 확장해서 사용할 수 있다는 의미이다. 정리 -객체지향의 상속은 상위 클래스의 특성을 재사용하는 것이다. -객체지향의 상속은 상위 클래스의 특성을 확장하는 것이다. -객체지향의 상속은 is a kind of 관계를 만족해야 한다. (해석:하위 클.. 2022. 10. 13.
클래스 맴버 vs 객체 멤버 클래스 맴버 vs 객체 멤버 클래스 맴버 vs 객체 멤버 = static 멤버 vs 인스턴스 멤버 클래스와 객체를 구별하는 법 -생물인 경우 “나이가 어떻게 되죠?” -무생물인 경우 “제조일자가 어떻게 되죠?” 객체는 유일무이하게 존재하는 실체이기 때문에 속성에 값을 가지고 있다. 클래스는 개념이면서 분류 체계일 뿐이므로 속성에 값을 가질 수 없다. 하지만 아래 질문은 어떤가? 미키의 꼬리는 몇개인가? 쥐의 꼬리는 몇개인가? 모든 질문의 답은 한개다. 위 질문에서 미키마우스는 객체다. 당연히 꼬리 개수에 답이 있다. 그런데 쥐는 클래스인데 꼬리 개수에 답이 있다. 꼬리 개수는 객체의 속성이지만 모든 객체가 같은 값을 가지고 있기에 클래스를 통해 질문해도 하나라는 답을 알 수 있다. 위 그림을 보면 Mou.. 2022. 10. 11.
자바에서 객체들은 메모리에 어떻게 표시될까? 자바에서 객체들은 메모리에 어떻게 표시될까? 객체지향은 인간이 눈으로 보고, 느끼고, 생활하는 현실 세계처럼 프로그래밍을 할 수는 없을까? 라는 고민 속에서 탄생했다. 즉, 0과 1로 대변되는 기계에 맞춰서 사고하던 방식을 버리고 현실세계를 실제로 인지하는 방식으로 프로그램을 만들자는 것이다. (객체지향이 현실 세계를 반영한다.) 객체지향의 큰그림 -세상에 존재하는 모든 것은 사물, 즉 객체이다. -각각의 사물은 고유하다. -사물은 속성을 갖는다. -사물은 행위를 한다. 그리고 사물을 하나하나 이해하기 보다는 사물을 분류(class)해서 이해하는 것이 인간의 인지법이다. -직립보행을 하며 말을 하는 존재를 사람이라고 분류한다. -밤하늘의 반짝이는 사물을 별이라고 분류한다. 손흥민, 김종민 이라고 하는 존.. 2022. 10. 7.
자바의 변수와 메서드는 메모리에 어떻게 표시될까 2 자바의 변수와 메서드는 메모리에 어떻게 표시될까 2 전역변수와 메모리 두 메서드 사이에 값을 전달하는 방법은 메서드를 호출할때 인자를 이용하는 방법과 메서드를 종료할 때 반환값을 넘겨주는 방법이 있다. 또한 한가지 방법이 더 있는데, 그것은 바로 전역 변수를 사용하는 것이다. share 변수에 static 키워드가 붙어 있다. 그래서 share 변수는 스태틱 영역에 변수 공간이 할당 된다. 그것도 class 안에 정의가 되었기 때문에 스태틱 영역에 배치될 때 그 안에 share 변수가 클래스의 멤버로 공간을 만들어서 저장된다. 7번째 줄을 실행하기 위해서 main 메서드 스택 프레임에 k 변수 공간이 만들어 진다. 이어서 제어는 fun() 메서드가 있는 12번째 줄로 넘어간다. 그럼 func() 메서드 .. 2022. 10. 6.
자바의 변수와 메서드는 메모리에 어떻게 표시될까 1 자바의 변수와 메서드는 메모리에 어떻게 표시될까 1 자바 프로그램의 개발과 구동 현실 세계에서 소프트웨어, 즉 , 프로그램은 개발자가 개발 도구를 이용해서 개발하고, 운영체제를 통해서 물리적 컴퓨터인 하드웨어에서 구동된다. 자바도 똑같다. 자바 개발 도구인 jdk를 이용해서 개발된 프로그램은 jre에 의해 가상의 컴퓨터인 jvm상에서 구동된다. 컴퓨터 : JVM 운영체제 : JRE 자바개발도구 : JDK JDK는 자바 소스 컴파일러인 javac.exe를 포함하고 있다. JRE는 자바 프로그램 실행기인 java.exe를 포함하고 있다. 자바가 이런 구조를 택한 이유는 기존 언어로 작성한 프로그램은 윈도우 95용, 7용, 8용, 리눅스용 등 각 플랫폼용으로 배포되는 설치파일을 따로 준비해야 했던 불편함을 없.. 2022. 10. 5.
기계어부터 객체지향에 이르기까지 정리 기계어부터 객체지향에 이르기까지 정리 @기계어 인류 최초의 프로그래머들은 꺼진 상태와 켜진 상태를 각각 0과 1로 해석할 수 있는 진공관을 이용해서 프로그램을 작성했다. 기계어는 기계가 이해하는 유일한 언어로 2진 숫자인 0과 1로만 표현된다. 기계어 코드는가 CPU에 따라 다르다. 애드삭 1+ 3 01010101 11110000 11001100 유니박 1 + 3 00111100 11100001 11001000 @어셈블리어 기계어를 벗어나 인간의 언어로 프로그래밍을 시작할 수 있게됨. 기계어의 명령들을 일상 용어로 표현하고 이걸 기계가 알 수 있는 기계어로 번역하게 하면 어떨까? 라는 생각을 하는 사람들이 생겨남. 실제로 개발자들은 기계어를 일상 용어로 표현했다. 그 결과 기계어 명령어와 일상용어를 일대.. 2022. 10. 4.
Java IO 패키지 정리 3 - socket 통신 Java IO 패키지 정리 3 - socket 통신 자바 IO 패키지 예제 - git 자바 스레드 예제 - git [1]서버소켓 예제 서버 package sec07.exam01.server_socket; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; public class ServerExample { public static void main(String[] args) { // TODO Auto-generated method stub ServerSocket serverSocket = null; try { //서버 소켓 객체 생성 serverSo.. 2021. 3. 17.